2

以前はXCodeを使用してアプリを開発し、それを使用していました。このメソッドを合成したリンクをIB/Storyboardに作成できます。

- (void)addTarget:(id)target action:(SEL)action forControlEvents: (UIControlEvents)controlEvents

ときのために

ただし、すべてをプログラムで実行しているわけではありません(必ずしも関連性はありませんが、rubymotionで)。UITextFieldのドキュメントを調べると、次のように実装したデリゲートメソッドがいくつか見つかりました。

def textFieldShouldReturn(text_field)
  text_field.resignFirstResponder
end

def textFieldShouldEndEditing(text_field)
  # this is for validations; don't set a first responder here
  true
end

def textFieldDidEndEditing(text_field)
  text_field == @email_field ? @password_field.becomeFirstResponder : delegate.validate_login_info
end

しかし、これを使用すると、addTargetアプローチで以前にできたように、入力フィールド(2つあります。電子メールとパスワード)をタブで移動できないことがわかりました。

これら2つのアプローチの違いは何ですか?前者は舞台裏で後者を実装していますか?一方がタブスルーを許可し、もう一方が許可しない理由がわかりません。ターゲット/アクションアプローチが舞台裏で行うのとは異なる方法でデリゲートメソッドを実装しただけですか?

フィードバックありがとうございます、pachun

4

2 に答える 2

1

これは、ターゲット/アクションとは何の関係もありません。Interface Builderで、からにドラッグして、HUDからデリゲートを選択することを意味していると思いUITextFieldますFile's Owner

上記を実行すると、次のようなコードで実行する必要があるtextFieldのデリゲートを割り当てる効果があります。

@email_field.delegate    = self
@password_field.delegate = self

上記は、'sを作成するクラスがUITextFieldそれらのデリゲートとして機能することを前提としています。

于 2012-05-25T13:46:33.753 に答える
0

この場合、委任とターゲット/アクションの間に違いがあるかどうかはわかりませんが、委任を使用すると、このように機能します。

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    if (textField == self.firstTextField)
    {
        [self.secondTextField becomeFirstResponder];
    }
    else if (textField == self.secondTextField)
    {
        [textField resignFirstResponder];
        // proceed with login
    }
    return YES;
}

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    // Validation
    return YES;
}

よろしく

于 2012-05-20T22:48:50.113 に答える