2017-09-08 22 views

答えて

0

単純なUITextField拡張を使用すると、テキストフィールドのコントロールイベントを観察し、それに応じて動作することができます。

拡張子:

import UIKit 
import RxSwift 
import RxCocoa 

extension UITextField { 
    func resignWhenFinished(_ disposeBag: DisposeBag) { 
    setNextResponder(nil, disposeBag: disposeBag) 
    } 

    func setNextResponder(_ nextResponder: UIResponder?, disposeBag: DisposeBag) { 
    // Set the return key type to: 
    // - next: When there is a next responder 
    // - done: When there is no next responder (simply resign) 
    returnKeyType = (nextResponder != nil) ? .next : .done 

    // Subscribe on editing end on exit control event 
    rx.controlEvent(.editingDidEndOnExit) 
     .subscribe(onNext: { [weak self, weak nextResponder] in 
     if let nextResponder = nextResponder { 
      // Switch to next responder if available 
      nextResponder.becomeFirstResponder() 
     } else { 
      // Otherwise simply resign 
      self?.resignFirstResponder() 
     } 
     }) 
     .addDisposableTo(disposeBag) 
    } 
} 

用途:

@IBOutlet private weak var firstTextField: UITextField! 
@IBOutlet private weak var secondTextField: UITextField! 
@IBOutlet private weak var lastTextField: UITextField! 
private let disposeBag = DisposeBag() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    firstTextField.setNextResponder(secondTextField, disposeBag: disposeBag) 
    secondTextField.setNextResponder(lastTextField, disposeBag: disposeBag) 
    lastTextField.resignWhenFinished(disposeBag) 
} 
関連する問題