2009-06-07 7 views
7

私はいくつかのUITextFieldとUISwitch(Settings.appに基づいて)を持ついくつかのカスタムUITableViewCellでUITableViewをセットアップしました。私の質問は、ユーザーがナビゲーションバーの[保存]ボタンをクリックしたときに、これらのテキストフィールドにアクセスし、コントロールを切り替えて値を保存するうえで、どのような方法が良いでしょうか?iPhone Table View:カスタムTableViewCellのテキストフィールドにアクセスする方法

答えて

15

私の提案は、カスタムUITableViewCellを使用しないことです。私はあなたのやり方をしていましたが、はるかに良い方法があります。 UITableViewCellaccessoryViewプロパティを使用します。UITextFieldUISwitchなどの任意のビューを割り当てることができます。設定アプリケーションとまったく同じように表示されます。あなたがそれにアクセスする必要がある場合に

すると、ちょうど

NSString *text = ((UITextField *)cell.accessoryView).text; 

を使用すると、ただし、セルを設定し、それらの値にアクセスするには注意しなければなりません。いずれかのセルがオフスクリーンになると、そのセルは削除され、テキストフィールドにアクセスすることはできません。あなたがあなたのセルを設定する際やりたいことはある:

cell.accessoryView = nil; //Make sure any old accessory view isn't there. 
if (/*cell needs text field*/) { 
    UITextField *textField = [[[UITextField alloc] initWithFrame:frame] autorelease]; 
    textField.text = savedValue; 
    cell.accessoryView = textField; 
    [textField addTarget:self action:@selector(textChanged:) forControlEvents:UIControlEventValueChanged]; 
} 

... 

- (void) textChanged:(UITextField *)source { 
    self.savedValue = source.text; 
} 
+0

テキストフィールドを持つ複数のセルがある場合(連絡先アプリケーションの連絡先を追加するような場合)はどうでしょうか?ビューごとに異なるメソッドを追加する必要がありますか? – Rodrigo

+0

ここにあるhttp://stackoverflow.com/questions/3572377/iphone-how-to-read-the-data-in-uitableview/3572595#3572595テキストフィールドのタグを変更できるので、1つの方法とスイッチを入れる。 – Rodrigo

+4

私はUIControlEventEditingDidEndを使用します。 UIControlEventValueChangedは呼び出されていないようです:? – whatever0010011

0

あなたはエドの提案に従わない場合、あなたはおそらく最高のカスタムセル内のテキストビューを保持し、ビューにアクセスするためのプロパティを追加しています。

0

また、カスタムセルに上位レベルのView Controllerへの参照を保持させ、ユーザーがそれらの値を更新するときに通知を送信することもできます。基本的に、UIKitの多くのライブラリオブジェクトで使用されるデリゲートパターンをコピーします。

関連する問題