0

End On Exit現在選択されているイベントで特定のテキストフィールドがクリックされたかどうかを検出しようとしていますTextField。説明しようとする代わりに、お見せしましょう。

- (IBAction)txtUsernameEdit:(id)sender {
    CGRect loginButton = btnLogin.frame;
    CGRect registerButton = btnRegister.frame;
    loginButton.origin.x = 19;
    loginButton.origin.y = 175;
    registerButton.origin.x = 189;
    registerButton.origin.y = 175;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];  
    btnLogin.frame = loginButton;
    btnRegister.frame = registerButton;    
}

- (IBAction)txtUsernameEndExit:(id)sender {
    if (!txtPassword.isTouchInside) {
    CGRect loginButton = btnLogin.frame;
    CGRect registerButton = btnRegister.frame;
    loginButton.origin.x = 19;
    loginButton.origin.y = 308;
    registerButton.origin.x = 189;
    registerButton.origin.y = 308;

    [UIView beginAnimations:nil context:nil];    
    [UIView setAnimationDuration:0.5];
    btnLogin.frame = loginButton;
    btnRegister.frame = registerButton;
    }
}

- (IBAction)txtPasswordEdit:(id)sender {
    CGRect loginButton = btnLogin.frame;
    CGRect registerButton = btnRegister.frame;
    loginButton.origin.x = 19;
    loginButton.origin.y = 175;
    registerButton.origin.x = 189;
    registerButton.origin.y = 175;

    [UIView beginAnimations:nil context    :nil];
    [UIView setAnimationDuration:0.5];    
    btnLogin.frame = loginButton;
    btnRegister.frame = registerButton;
}

- (IBAction)txtPasswordEndExit:(id)sender {
    if (!txtPassword.isHighlighted) {
    CGRect loginButton = btnLogin.frame;
    CGRect registerButton = btnRegister.frame;
    loginButton.origin.x = 19;
    loginButton.origin.y = 308;
    registerButton.origin.x = 189;
    registerButton.origin.y = 308;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    btnLogin.frame = loginButton;
    btnRegister.frame = registerButton;
    }
}

だから私は2つのテキストフィールドtxtUsernametxtPassword. 関数txtUsernameEndExittxtPasswordEndExitは、ユーザーが反対側のテキストフィールドまたはキーボードの完了キーをクリックしたときに起動されます。ユーザーが実際にそこをクリックした場合、これらの関数でどのように確認できますか?

if-clause では、次の属性とメソッドを試しました: - isFirstResponder - isTouchInside - isEditing - isHighlighted

しかし、End On Exit 関数がまだ起動されていない場合、これらの属性はどれも変更されていないと思います。

適切なアプローチは何でしょうか?

編集 - 異なるアプローチ そこで、最近、キーボードの表示または非表示も観察できると考えました。ビューで自動レイアウトを有効にしており、テキストフィールドが 2 つとボタンが 2 つしかありません。テキストフィールドをタップするとすぐに、アニメーションが説明するようにボタンが表示され、再び下に移動します(明らかに自動反転がこれを行います)が、テキストフィールドをタップしてから別のテキストフィールドをタップすると、キーボードは下がらず、ボタンは下に移動します。これをアニメーション化するために使用したすべてのコードは次のとおりです。

- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardDidShow:)
                                                 name:UIKeyboardDidShowNotification
                                               object:nil];
}

- (void)keyboardDidShow: (NSNotification *) notif{
    CGRect loginButton = btnLogin.frame;
    CGRect registerButton = btnRegister.frame;
    loginButton.origin.x = 19;
    loginButton.origin.y = 175;
    registerButton.origin.x = 189;
    registerButton.origin.y = 175;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    btnLogin.frame = loginButton;
    btnRegister.frame = registerButton;
}
4

1 に答える 1

1

UITextFieldDelegate メソッドを使用しない理由:

  • textFieldShouldBeginEditing:
  • textFieldDidBeginEditing:
  • textFieldShouldEndEditing:
  • textFieldDidEndEditing:
于 2013-11-10T21:03:03.960 に答える