2

非常に初心者のobj-cの質問。

2つのセクションを持つプレーンなUITableViewがありますが、現在は最初のセクションにのみ関心があります。このセクションには、4つのカスタムセル(標準のUITableViewCellから継承)があり、プロパティとしてUITextFieldがあります。

「次へ」、「前へ」(テーブルビューのtextFieldsを切り替えるため)、「完了」(キーボードを閉じる)のボタンを使用して、カスタム入力アクセサリビューを改善する必要があります。http://uaimage.com/image/62f08045

-textFieldShouldReturnで、textFieldsのタグを0から3に設定します。次の計画は、textFieldsを-viewDidLoadのNSMutableArrayに追加してから、textFieldsのファーストレスポンダーを設定して再署名することです。「次へ」ボタンのおおよそのコードリスト:

- (void) inputAccessoryViewDidSelectNext:(FDInputAccessoryView *)view {
    for (UITextField *textField in [self textFieldsArray]) {

        if ([textField isFirstResponder]) {

            [textField resignFirstResponder];
     UITextField *field = [[self textFieldsArray] objectAtIndex:textField.tag + 1];
            [field becomeFirstResponder];
        }

    }
}

質問:

  • これは正しい方法ですか、それとも問題を解決するためのより良いアプローチがありますか?
  • テキストフィールドにタグを付ける必要がありますか、それともセルが組み込まれているセルのindexPathを使用する必要がありますか?(またはtextFieldsを追跡するのに最適なものは何ですか?)
  • そして主な質問:セルからtextFieldを「取得」するための構文は何ですか?

ばかげた質問で申し訳ありませんが、私は非常に初心者です。

ありがとう、アレックス。

4

1 に答える 1

5

あなたは正しい考えを持っていると思いますが、いくつかのことが頭に浮かびます:

  • 安全のため、タグ番号 0 から始めないでください。すべてのビューにはデフォルトで 0 に設定されたタグ番号があるため、予期しない結果が生じる可能性があります。
  • 内にテキスト ビューのタグを設定しないでください。または、textFields を開始する場所textFieldShouldReturnにタグを設定してください。cellForRowAtIndexPathviewDidLoad
  • セル自体ではなく、セルの contentView に textFields を追加します。
  • 最初のテキスト フィールドから最初のレスポンダーを辞任する必要はありませんbecomeFirstResponder。新しいテキスト フィールドだけで構いません。
  • 最後のテキスト ビューのエッジ ケースを処理していることを確認してください。最初のテキスト フィールドにループするか、最後にキーボードを閉じることができます。

セル内の textField を取得する場合:

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:
                         [NSIndexPath indexPathForRow:ROW_NUMBER inSection:1]];
UITextField *textField = (UITextField *)[cell.contentView viewWithTag:TEXT_FIELD_TAG];
于 2012-11-06T22:04:19.300 に答える