キーボードが非表示になってテキストフィールドに表示されているときにビューのアニメーションを上に移動しようとしていますキーボードがすでに表示されているためです。
ViewDidLoadで、次を登録しました。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
そしてkeyboardWillShowおよびkeyboardWillHideメソッドで、ビューを移動するかどうかを決定し、それに応じてアニメーション化します。ただし、キーボードが既に表示されていて、ユーザーがビューを上に移動する必要がある別のテキストフィールドをクリックした場合、メソッドは呼び出されません。キーボードが既に表示されているときに、フォーカスが別のテキストフィールドに変更されたかどうかを検出する方法はありますか?すべてのテキストフィールドをデリゲートに設定せずにこれを実行する方法があれば素晴らしいでしょう。
前もって感謝します。
UITextField
デリゲートメソッドを使用します。キーボードメソッドよりも、あなたの場合に適しています。textFieldがフォーカスを取得すると、- (void)textFieldDidBeginEditing:(UITextField *)textField;
が起動され、フォーカスを失ったときに- (void)textFieldDidEndEditing:(UITextField *)textField;
が起動します。解雇。
-(BOOL)textFieldShouldBeginEditing:(UITextField*)textField {
if (textField.tag == 1) { //first textField tag
//textField 1
}
else {
//textField 2
}
}
UITextFieldDelegateを使用する
そして
func textFieldDidBeginEditing(textField: UITextField) {
println("did")
if textField.tag == 1{
self.txtFullName.layer.borderColor = UIColor.blueColor().CGColor
}
}
In Swift 4:
UITextFieldDelegate
クラスにViewController
を実装しますtextFields
のアウトレットを追加しますtextFieldDidBeginEditing
を実装します(その特定のアクションについて通知を受けたい場合は、 Appleのドキュメント を参照してください)。それをコードで埋めますviewDidLoad()
で、ステップ2で以前に追加したViewController
のデリゲートとしてtextField
クラスを割り当てます。次のように見える必要があります。
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var yourTextField: UITextField!
func textFieldDidBeginEditing(_ textField: UITextField) {
// Your code here
}
override func viewDidLoad() {
super.viewDidLoad()
yourTextField.delegate = self
}
...
}