indexPathForCell 在 IOS 7 下返回 NULL,在 IOS 6 下工作正常

Posted

技术标签:

【中文标题】indexPathForCell 在 IOS 7 下返回 NULL,在 IOS 6 下工作正常【英文标题】:indexPathForCell returning NULL under IOS 7, works fine under IOS 6 【发布时间】:2013-09-11 21:33:07 【问题描述】:

我希望现在 ios 7 的应用程序正在被 Apple 接受,我们可以谈谈吗?

我正在尝试修复我的应用程序,使其可以在 IOS 7 上运行,并且今晚取得了一些非常好的进展。我有两个悬而未决的问题,但将分别发布。第一个问题是这一行(我在调试之后添加了一个日志行)...

 NSIndexPath *indexPath = [settingsTableView indexPathForCell:(UITableViewCell *)[sender superview]];
 NSLog(@"Changed %@ <-**-> %@", [sender superview], indexPath );

日志显示 ....

IOS7

 2013-09-11 22:18:02.985 BusTimes[21013:a0b] Changed <UITableViewCellScrollView: 0xbfc1c80; frame =  (0 0; 320 44); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0xbfc1e70>; layer = <CALayer: 0xbfc1540>; contentOffset: 0, 0> <-**-> (null)

 2013-09-11 22:18:08.577 BusTimes[21013:a0b] Changed <UITableViewCellScrollView: 0xbfc62d0; frame = (0 0; 320 44); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0xbfc64c0>; layer = <CALayer: 0xbfc5b90>; contentOffset: 0, 0> <-**-> (null)

IOS 6

2013-09-11 22:25:34.495 BusTimes[2116:907] Changed <UITableViewCell: 0x20862f40; frame = (0 179; 320 44); text = 'Reminder Mins: 5'; autoresize = W; layer = <CALayer: 0x208523d0>> <-**-> <NSIndexPath 0x20861430> 2 indexes [0, 3]
2013-09-11 22:25:47.499 BusTimes[2116:907] Changed <UITableViewCell: 0x20865180; frame = (0 223; 320 44); text = 'AutoRefresh Secs: 60'; autoresize = W; layer = <CALayer: 0x20865340>> <-**-> <NSIndexPath 0x2085c0d0> 2 indexes [0, 4]

因此,在 IOS 7 上,indexPath 始终为 (null),.section 和 .row 始终为 0。但这在 IOS 6 上运行良好,并返回 .section 0 和第 3 行以及 .row 4。任何人都可以建议我如何让 IOS 7 以同样的方式运行?

非常感谢。

等离子

* 解决方案 - 我在 cmets *

之后将我的代码更改为
UIView *view = sender;

while (![view isKindOfClass:[UITableViewCell class]]) 
    view = [view superview];


NSIndexPath *indexPath = [settingsTableView indexPathForCell:(UITableViewCell *)view];

【问题讨论】:

这个答案应该对你有帮助:***.com/a/18743747/1838805 魔术,我已经设法解决了这个问题,现在是时候调查另一个问题了。 IOS 7 downt 上的文本输入弹出框工作! :( indexPathForCell returns nil since ios7的可能重复 效果很好,谢谢兄弟 这样做是因为 iOS 7 中的视图层次结构发生了变化。 【参考方案1】:

对单元格的视图层次结构不做任何假设通常更安全。过去,我在 UIView 上使用过类似方法的类别来查找作为单元格的超级视图:

- (UIView*)ancestorOrSelfWithClass:(Class)cls 
  if ([self isKindOfClass:cls]) 
    return self;

   else if (self.superview) 
    return [self.superview ancestorOrSelfWithClass:cls];

   else 
    return nil;
  

因此,您将要求[sender ancestorOrSelfWithClass:[UITableViewCell class]] 获取实际的单元格,无论单元格中存在什么层次结构,它都会起作用。

【讨论】:

以上是关于indexPathForCell 在 IOS 7 下返回 NULL,在 IOS 6 下工作正常的主要内容,如果未能解决你的问题,请参考以下文章

UITableView indexPathForCell:在iOS10中使用Xcode8(Swift2.3)返回nil

UItableview indexPathForCell - iOS6 'v' iOS7

IndexPathForCell 和 IndexPathForRowAtPoint 崩溃

在单元格中单击时,tableView:indexPathForCell 返回 nil

重新加载UITableView数据后,indexPathForCell返回null

self.tableView.indexPathForCell(cell) 返回错误的单元格?