我希望现在的iOS 7应用程序被苹果接受,我们可以谈论它?
我试图修复我的应用程序,所以它适用于IOS 7,并在今天晚上取得了一些非常好的进展.我有两个悬而未决的问题,但会分开发布.第一个问题是这一行(我添加了一个日志行来调试它)…
NSIndexPath *indexPath = [settingsTableView indexPathForCell:(UITableViewCell *)[sender superview]]; NSLog(@"Changed %@ <-**-> %@",[sender superview],indexPath );
日志显示….
IOS 7
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以同样的方式为我表现?
提前谢谢了.
等离子体
UIView *view = sender; while (![view isKindOfClass:[UITableViewCell class]]) { view = [view superview]; } NSIndexPath *indexPath = [settingsTableView indexPathForCell:(UITableViewCell *)view];
解决方法
对单元格的视图层次结构不作任何假设通常更为安全.过去,我在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类]]来获取实际的单元格,无论单元格中存在什么层次结构,它都可以工作.