2016-03-31 13 views
0

dönmek UITextFieldsoru başlığın açıklaması vardır anahtar sonraki hata

İşte InputViewController kod parçası:

class InputViewController: UIViewController, UITextFieldDelegate { 
    private var firstResponderTag = 0 
    ... 
    func textFieldDidBeginEditing(textField: UITextField) { 
     firstResponderTag = textField.tag 
    } 

    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     if let nextResponder = textField.superview?.viewWithTag(textField.tag + 1) { 
      nextResponder.becomeFirstResponder() 
     } else { 
      textField.resignFirstResponder() 
     } 
     return true 
    } 
    ... 
} 

Ve SigningInViewController:

class SigningInViewController: InputViewController { 
    ... 
    @IBOutlet 
    private weak var emailTextField: TextField! { 
     didSet { 
      emailTextField.validator = EmailValidator() 
     } 
    } 

    @IBOutlet 
    private weak var passwordTextField: TextField! { 
     didSet { 
      passwordTextField.validator = PasswordValidator() 
     } 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     Observable.combineLatest(emailTextField.rx_text, passwordTextField.rx_text, resultSelector: { 
      (email: String, password: String) in 
      email.length > 0 && password.length > 0 
     }).bindTo(signInButton.rx_enabled).addDisposableTo(bag) 
    } 
    ... 
} 

sorun olduğunu ben Enter tuşuna basarsanız Next, bir sonraki metin alanı ilk yanıtlayıcı olur ve hemen ilk yanıtlayıcıyı sonlandırır. Ama eğer bağlayıcı dönüş anahtarını kaldırırsam gerektiği gibi çalışır. Peki, ne yanlış yapıyorum?

UPD:

Ben RxSwift resmi repo benzer bir soru cevapsız ettik. çözüm senin kodunda hatasının nedenini bulamıyorum, ama ben sadece son zamanlarda yazdığım bir kod örneğini paylaşabilir

if let nextResponder = textField.superview?.viewWithTag(textField.tag + 1) { 
    dispatch_async(dispath_get_main_queue(), { 
     nextResponder.becomeFirstResponder() 
    }) 
} else { 
+0

kullanmanın çalışıyor? – mohamede1945

+1

@ mohamede1945, evet, onu buldum. Bunu UPD bölümünde görebilirsiniz) –

cevap

0

olduğunu.

class NextTextField: UITextField, UITextFieldDelegate { 

    @IBOutlet weak var returnView: UIView? { 
     didSet { 
      if returnView is UITextField { 
       returnKeyType = UIReturnKeyType.Next 
      } 
     } 
    } 

    override func awakeFromNib() { 
     super.awakeFromNib() 

     delegate = self 
    } 

    func textFieldShouldReturn(textField: UITextField) -> Bool { 

     if let nextTextField = self.returnView as? UITextField { 
      nextTextField.becomeFirstResponder() 
     } else if let nextButton = self.returnView as? UIButton { 
      nextButton.sendActionsForControlEvents(.TouchUpInside) 
     } else { 
      self.resignFirstResponder() 
     } 

     return true 
    } 

} 

Kolayca kod veya storyboard aracılığıyla kolayca ayarlanabilen textField öğesine zayıf bir returnView ekler. Metin alanının dönüş tuşuna basıldığında, başka bir metin alanı olsaydı, ilk kez bir geri dönüş ekranı görünürse ve bir geri dönüş yoksa klavyeyi gizlerse, düğmeye dönüş yapar.

Swift ve RxSwift/RxCocoa yılında
+0

Ne yazık ki bu kod ayrıca benimki ile birlikte hata ile de çalışır. Ama 'nextButton' ile güzel bir çözüm için teşekkür ederim. RxSwift/RxCocoa’da bir hata olduğunu düşünüyorum. –

0

3.0.1

placeTextField.rx.controlEvent(UIControlEvents.editingDidEndOnExit)

yerine bir çözüm buldunuz textFieldShouldReturn

İlgili konular