textFieldDidBeginEditingとtextFieldShouldBeginEditingの正確な違いは何ですか。そして、どのシナリオでそれらを使用するかを知りたい(テキストフィールドに何かを入力すると呼び出されることを知っている。プログラムで両方を使用するときに呼び出される正確な時刻を知りたい)
4 に答える
「shouldBegin」の何かを使用すると、戻り値にNOと言って、アクションを禁止できます。
「didBegin」は、それが発生し始めたばかりであり、その時点で実行する必要のあるアクションを実行する必要があることを示しています。
メソッドは、たとえばユーザーがtextFieldをタップしたときに、textFieldを編集できるようにするtextFieldShouldBeginEditing
ためにデリゲートに許可を要求します。
一方、 textFieldがコンテンツの編集を開始したとき(つまり、許可されている場合はtextFieldDidBeginEditing
直後)に呼び出されます。textFieldShouldBeginEditing
例:編集不可能なテキストフィールドを作成したいので、NOを返します。
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
return NO;
}
textFieldDidBeginEditingについて:
ディスカッションこのメソッドは、指定されたテキストフィールドがちょうど最初のレスポンダーになったことをデリゲートに通知します。このメソッドを使用して、デリゲートの状態情報を更新できます。たとえば、このメソッドを使用して、編集中に表示されるはずのオーバーレイビューを表示できます。
たとえば、テキストフィールドサブクラスがあり(そしてそれを編集可能にしたい)、ユーザーがコンテンツを編集している間にグラフィックが変更されるとしましょう(例:ユーザーが入力している間に別のフォーカスリングを表示したい)、それを使用しますこれらのことをするために。
「username」フィールドと「password」フィールドのタグ(ストーリーボードから)をそれぞれ0と1に設定してから、func textFieldDidBeginEditing内のacitveフィールドをキャッチしようとすると、機能しません。
**func textFieldDidBeginEditing(_ textField: UITextField) -> Bool
{
activeTextField = textField
return true
} **
**func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
let value = activeTextField.tag
switch value
{
case 0:
//ユーザー名フィールドの場合はこのケースを実行する必要があります
case 1:
//パスワードフィールドの場合はこのケースを実行する必要があります
}
} **
同じ関数が機能しており、@ objc func textFieldDidBeginEditingとして呼び出されたときに正しい結果を提供します。「objc」という単語がないと、アクティブなフィールドが選択されません。知りたいのですが、なぜそうなのか...
**@objc func textFieldDidBeginEditing(_ textField: ) -> Bool
{
activeTextField = textField
return true
} **