2012-01-03 13 views
1

私のアプリケーションでは、編集の変更をtextFieldDidEndEditing:にコミットしたときにUITextFieldがどのセルから来るのかを追跡する必要があります。これを行うには、セルのテキストフィールドのタグプロパティをtableview:cellForRowAtIndexPath:に設定しました。行が移動された後にUITableViewCellタグのプロパティを更新します。

セルが移動すると、これは少し問題を引き起こします。たとえば、下のセルを一番上に移動し、一番下にあるセルを削除してから、一番上に配置したセルを編集しようとすると、タグのプロパティがまだ8になっているため、 (または別の番号)が、私のデータソースにこの多くの要素がありません。 (BookmarkTextEntryTableViewCell *)[[self tableView] cellForRowAtIndexPath:toIndexPath]がが行を移動する前があったセルを返すため

は私がtableView:moveRowAtIndexPath:toIndexPath:

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { 
    NSString *siteToMove = [[sites objectAtIndex:[fromIndexPath row]] retain]; 

    [sites removeObjectAtIndex:[fromIndexPath row]]; 
    [sites insertObject:siteToMove atIndex:[toIndexPath row]]; 

    if ([toIndexPath section] == 1) { 
     [[(BookmarkTextEntryTableViewCell *)[[self tableView] cellForRowAtIndexPath:toIndexPath] textField] setTag:[toIndexPath row]]; 
    } 
} 

にタグを更新することでこの問題を解決しようとしたが、これは動作しません。考え直しオン:あなたがテーブルにサブビューとして追加し、その後

for (UIView* subview in [[self tableView] subviews]) { 
if ([subview isKindOfClass:[UITextField class]]) { 
    if(subview.tag==oldTag){ 
    subview.tag = newTag; 
    break; 
    } 
} 
} 

EDIT AS-新しいタグをチェックして、設定した可能性のあるすべてのUITextField Sを反復処理することができます- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath方法では、

答えて

1

残りのセルのタグをすべてリセットする場合に備えて、テーブルデータをリロードするだけで済みます。

関連する問題