iOS 8: - [UITableViewWrapperView textField]:发送到实例的无法识别的选择器

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的层次结构,或者我错过了什么?谢谢!

ger*_*iam 9

我遇到了同样的问题.这是一个更可靠的方法:

UITextField* textField = (UITextField*)sender;
NSIndexPath* indexPath = [self.tableView indexPathForRowAtPoint:[self.tableView convertPoint:textField.center fromView:textField.superview]];
Run Code Online (Sandbox Code Playgroud)

无论UITableViewCell的底层视图层次结构如何,这都将起作用.


A-L*_*ive 6

不同的iO版本有不同的实现,UITableView或者UITableViewController作为一个简单的修复,你必须迭代superviews直到找到所需的视图类而不是依赖它作为第N个超级视图.