0

各セルにテキスト ラベルとテキスト フィールドの両方が含まれるテーブルを作成しました。テキストフィールドをそのまま追加してい[cell addSubview:passwordField];ますが、視覚的な観点から、それらは表示され、編集可能です....

入力した値をテキストフィールドから取得しようとすると、問題が発生します。セルを反復処理してサブビュー (つまり、テキスト フィールド) を取得しようとしましたが、反復処理ではテキスト ラベルしか検出されません。

検索に使用しているコードは次のとおりです。

for(NSInteger i =0; i < [tableView numberOfRowsInSection:0]; i++){
   NSIndexPath *path = [NSIndexPath indexPathForRow:i inSection:0];
   UITableViewCell *cell = [tableView cellForRowAtIndexPath:path];
   UIView* subView = [[cell.contentView subviews]lastObject]; // I've also tried object at index here

// Anything beyond this is just matching....

私が取った別のアプローチは、サブビューを再帰的に検索することでしたが、やはり結果は得られませんでした。

4

4 に答える 4

6

textFieldセルのサブビューを追加しました。

[cell addSubview:passwordField];

あなたがそれを見つけようとしている間cell.contentView。あなたをサブビューとして
追加しますtextFieldcell.Contentview

[cell.contentView addSubview:passwordField];

そして、この方法でそれを見つけます -

for(UIView *view in [cell.contentView subviews])
{
    if([view isKindOfClass:[UITextfield class]])
    {
       UITextField *textField = (UITextField *)view;
       NSLog(@"%@",textField.text);
    }
}
于 2012-10-22T16:10:55.637 に答える
2

代わりに、次のUIView* subView = [[cell.contentView subviews]lastObject];ように見つけることができます。

for(UIView *view in [cell subviews])
{
  if([view isKindOfClass:[UITextfield class]]){
    // view is the reference to your textfield
  }
}

そうすれば、他UIViewのsをサブビューとして追加しても、サブビューインデックスを追跡しなくても、テキストフィールドの参照を取得できます。

于 2012-10-22T16:14:08.460 に答える
2

TableViewにデータソースをマップして、データソースの値を取得/更新しないのはなぜですか。reloadRowsAtIndexPaths次に、変更したばかりの行だけをロードするために呼び出すことができます。TableViewデータソースを更新するだけでなく、反復処理を試みるのは非常に非効率的です。

于 2012-10-22T16:12:29.727 に答える
0

私には2つのことが起こります:

  1. 長期的には、プロパティとしてアクセス可能なUITableViewCellを含むを作成する方が簡単です。UITextFieldnib を使用してセルをレイアウトするか、セルの init メソッドでプログラム的に行うことができます。このアプローチにより、コードの管理が容易になります。

  2. セルの再利用を考慮する必要があります。セルを再利用している場合(そうあるべきです)、再利用する前にテキストフィールドから値を取得して保存する必要があります。

于 2012-10-22T17:17:04.287 に答える