reb*_*o95 10 objective-c uitableview ios ios8
您好:我一直在iOS 6,7和现在8(测试版5)上测试我的应用程序.我UITableView的自定义UITableViewCells在6和7上正常工作.但是,在iOS 8上,当我尝试访问单元格的子视图(文本字段)时,我遇到了崩溃.
我知道iOS 7中单元格层次结构中还有另一个视图.奇怪的是,iOS 8中的情况并非如此.这是我正在使用的代码:
//Get the cell
CustomCell *cell = nil;
//NOTE: GradingTableViewCell > UITableViewCellScrollView (iOS 7+ ONLY) > UITableViewCellContentView > UIButton (sender)
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
cell = (CustomCell *)sender.superview.superview;
} else {
cell = (CustomCell *)sender.superview.superview.superview;
}
//Get the cell's index path
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
//etc.
NSLog(@"%@", cell.textField); //<---Crashes here
Run Code Online (Sandbox Code Playgroud)
所以,正如你所看到的,我正在考虑iOS 7中的额外视图.在添加一些断点并仔细查看变量后,我看到它cell存在,但是它在接口文件中的所有子视图(都是联系) - 包括textField- 是nil.在指定的行,我收到以下崩溃日志:
-[UITableViewWrapperView textField]: unrecognized selector sent to instance 0x12c651430
Run Code Online (Sandbox Code Playgroud)
我进一步研究了这个,我发现了这个:
将else语句更改为与前一行相同可以消除崩溃,并且应用程序正常工作(sender.superview.superview在iOS 6中使用类似).
这对我来说毫无意义.Apple是否将UITableViewCells 的层次结构恢复为iOS 6的层次结构,或者我错过了什么?谢谢!
我遇到了同样的问题.这是一个更可靠的方法:
UITextField* textField = (UITextField*)sender;
NSIndexPath* indexPath = [self.tableView indexPathForRowAtPoint:[self.tableView convertPoint:textField.center fromView:textField.superview]];
Run Code Online (Sandbox Code Playgroud)
无论UITableViewCell的底层视图层次结构如何,这都将起作用.
不同的iO版本有不同的实现,UITableView或者UITableViewController作为一个简单的修复,你必须迭代superviews直到找到所需的视图类而不是依赖它作为第N个超级视图.
| 归档时间: |
|
| 查看次数: |
5362 次 |
| 最近记录: |