19

私のアプリは ios6.1 で正常に動作していました。iOS7シミュレーターを試しましたが、次の部分が機能しません:

EditingCell *cell = (EditingCell*) [[textField superview] superview];
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
NSLog(@"the section is %d and row is %d", indexPath.section, indexPath.row);
NSUInteger section = [indexPath section];
NSUInteger row = [indexPath row];
NSString *rowKey = [[keysForRows objectAtIndex: section] objectAtIndex: row];

それは常に来ます:

the section is 0 and row is 0

別のセクション/行が選択されていますが。これがios7で機能しない理由を誰かが知っていますか?

4

3 に答える 3

30

テキストフィールドの「囲んでいる」テーブルビューセルを見つけるためのアプローチは脆弱です。これは、固定ビュー階層を想定しているためです (iOS 6 と iOS 7 の間で変更されたようです)。

考えられる解決策の 1 つは、テーブル ビュー セルが見つかるまでビュー階層を上に移動することです。

UIView *view = textField;
while (view != nil && ![view isKindOfClass:[UITableViewCell class]]) {
    view = [view superview];
}
EditingCell *cell = (EditingCell *)view;

まったく異なるがよく使用される方法は、テキスト フィールドに行番号を「タグ付け」することです。

cell.textField.tag = indexPath.row;   // in cellForRowAtIndexPath

そして、そのタグをテキスト フィールド デリゲート メソッドで使用するだけです。

于 2013-09-11T14:20:26.230 に答える