2016-01-01 5 views
0

Я добавил resignFirstResponder и коснулсяBegan к моему коду, но клавиатура не увольняет. Я уже проверил делегат и назначил делегата текстовым полям, но по-прежнему не заметил никаких увольнений.коды не отклоняют клавиатуру

Помогите определить ошибку? (Я предполагаю, что может быть о нескольких TextFields?)

import UIKit 
import Parse 

class SignUpViewController: UIViewController, UITextFieldDelegate { 

    @IBAction func BackToFirstPageButton(sender: AnyObject) { 

     performSegueWithIdentifier("BackToLogInPage", sender: self) 
    } 

    func SignOutForEmailVerification() { 

     PFUser.logOut() 
     performSegueWithIdentifier("BackToLogInPage", sender: self) 
    } 

    @IBOutlet var UsernameTextField: UITextField! 

    @IBOutlet var PasswordTextField: UITextField! 

    @IBOutlet var EmailTextField: UITextField! 

    var ActivityIndicator:UIActivityIndicatorView = UIActivityIndicatorView() 

    @IBAction func SignUpButton(sender: AnyObject) { 

     if UsernameTextField.text == "" || PasswordTextField.text == "" || EmailTextField.text == "" { 

      let SignUpAlert = UIAlertController (title: "Error in form", message: "Please fill in the blanks", preferredStyle: UIAlertControllerStyle.Alert) 

      SignUpAlert.addAction((UIAlertAction(title: "Dismiss", style: .Default, handler: { (action) -> Void in 

      }))) 

      self.presentViewController(SignUpAlert, animated: true, completion: nil) 

     } else { 

      ActivityIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50)) 
      ActivityIndicator.center = self.view.center 
      ActivityIndicator.hidesWhenStopped = true 
      ActivityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray 
      view.addSubview(ActivityIndicator) 
      ActivityIndicator.startAnimating() 
      UIApplication.sharedApplication().beginIgnoringInteractionEvents() 

      var user = PFUser() 
      user.username = UsernameTextField.text 
      user.password = PasswordTextField.text 
      user.email = EmailTextField.text 

      user.signUpInBackgroundWithBlock({ (success, error) -> Void in 

       self.ActivityIndicator.stopAnimating() 
       UIApplication.sharedApplication().endIgnoringInteractionEvents() 

       if error == nil { 

        let EmailVerificationAlert = UIAlertController(title: "Email Verification", message: "Please click the link in an email we have just sent you", preferredStyle: UIAlertControllerStyle.Alert) 

        EmailVerificationAlert.addAction(UIAlertAction(title: "Okay", style: .Default, handler: { EmailVerificationAlert in self.SignOutForEmailVerification()}) 
       ) 

        self.presentViewController(EmailVerificationAlert, animated: true, completion: nil) 
      } 

     }) 
     } 

    func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 

     self.UsernameTextField.delegate = self 
     self.PasswordTextField.delegate = self 
     self.EmailTextField.delegate = self 

    } 

    func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 

     // Dispose of any resources that can be recreated. 
    } 

     func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

      self.view.endEditing(true) 

     } 

     func textFieldShouldReturn(textField: UITextField!) -> Bool { 

      textField.resignFirstResponder() 

      return true 

     }  
    }  
} 

ответ

1

Когда пользователь нажимает кнопку «Return» на клавиатуре

Как вы уже добавили UITextFieldDelegate, попробуйте изменить этот код :

func textFieldShouldReturn(textField: UITextField!) -> Bool { 
    self.UsernameTextField.resignFirstResponder(); 
    self.EmailTextField.resignFirstResponder(); 
    self.PasswordTextField.resignFirstResponder(); 

    return true; 
} 

Это будет работать, когда пользователь нажимает кнопку на клавиатуре.

Ваша ошибка в том, как вы говорили, обрабатывая несколько текстовых полей. Также вы должны сказать, какой из них вы хотите отменить FirstResponder().

Когда пользователь нажимает экран

Пользователь также может закрыть клавиатуру, нажав в любом месте на экране. Здесь у нас есть UITapGestureRecognizer, который обнаруживает крановую клавиатуру. Это альтернативное решение.

override func viewDidLoad() { 
super.viewDidLoad() 

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard") 
view.addGestureRecognizer(tap) 
} 

func dismissKeyboard() { 

    view.endEditing(true) 
} 
+0

Спасибо за ответ. Я пробовал это, но все еще не заметил отклонения ... каких-либо других возможных решений или каких-либо шансов на настройку стимулятора? –

+0

Have вы даете методу viewDidLoad текстовые поля делегировать как self? как в вашем примере – Antoine

+0

да, мне нравится «self.UserNameTextField.delegate = self» то же самое для двух других текстовых полей –

0
import UIKit 
import Parse 

class SignUpViewController: UIViewController, UITextFieldDelegate { 

@IBOutlet var UsernameTextField: UITextField! 
@IBOutlet var PasswordTextField: UITextField! 
@IBOutlet var EmailTextField: UITextField! 

var ActivityIndicator:UIActivityIndicatorView = UIActivityIndicatorView() 
var currentTextField : UITextField? 

func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 

    self.UsernameTextField.delegate = self 
    self.PasswordTextField.delegate = self 
    self.EmailTextField.delegate = self 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

@IBAction func BackToFirstPageButton(sender: AnyObject) { 

    performSegueWithIdentifier("BackToLogInPage", sender: self) 

} 

func SignOutForEmailVerification() { 

    PFUser.logOut() 
    performSegueWithIdentifier("BackToLogInPage", sender: self) 
} 

@IBAction func SignUpButton(sender: AnyObject) { 

    if UsernameTextField.text == "" || PasswordTextField.text == "" || EmailTextField.text == "" { 

     let SignUpAlert = UIAlertController (title: "Error in form", message: "Please fill in the blanks", preferredStyle: UIAlertControllerStyle.Alert) 

     SignUpAlert.addAction((UIAlertAction(title: "Dismiss", style: .Default, handler: { (action) -> Void in 

     }))) 

     self.presentViewController(SignUpAlert, animated: true, completion: nil) 

    } else { 

     currentTextField?.resignFirstResponder(); 

     ActivityIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50)) 
     ActivityIndicator.center = self.view.center 
     ActivityIndicator.hidesWhenStopped = true 
     ActivityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray 
     view.addSubview(ActivityIndicator) 
     ActivityIndicator.startAnimating() 
     UIApplication.sharedApplication().beginIgnoringInteractionEvents() 

     var user = PFUser() 
     user.username = UsernameTextField.text 
     user.password = PasswordTextField.text 
     user.email = EmailTextField.text 

     user.signUpInBackgroundWithBlock({ (success, error) -> Void in 

      self.ActivityIndicator.stopAnimating() 
      UIApplication.sharedApplication().endIgnoringInteractionEvents() 

      if error == nil { 

       let EmailVerificationAlert = UIAlertController(title: "Email Verification", message: "Please click the link in an email we have just sent you", preferredStyle: UIAlertControllerStyle.Alert) 

       EmailVerificationAlert.addAction(UIAlertAction(title: "Okay", style: .Default, handler: { EmailVerificationAlert in self.SignOutForEmailVerification()}) 
       ) 

       self.presentViewController(EmailVerificationAlert, animated: true, completion: nil) 
      } 

     }) 
    } 

    func textFieldDidBeginEditing(textField: UITextField!){ 

     currentTextField = textField; 

    } 

    func textFieldShouldReturn(textField: UITextField!) -> Bool { 

     currentTextField.resignFirstResponder() 
     return true 

    } 

} 

} 
+0

благодарит за ответ. до сих пор нет шансов уволить ... любые другие возможные решения? или есть какие-то изменения, которые я должен внести в стимулятор? –

+0

textFieldShouldReturn получает вызов или нет? – technerd

+0

Не нажимать кнопку возврата, не отбрасывая клавиатуру: ((( –