我升级到 Xcode 5,我的应用程序以 iOS 7 为目标,我的应用程序不再响应 scrollToIndexPath 以将适当的 tableviewcell 滚动到键盘之外
我的设置是我有一个自定义的 tableview 单元格,上面有文本字段,并使用它来生成多个 tableview 单元格来显示和编辑地址的一部分。
点击单元格上的文本框触发
- (void)textFieldDidBeginEditing:(UITextField *)textField
让它滚动到顶部的代码如下所示
UITableViewCell *cell = (UITableViewCell*) textField.superview.superview;
[self scrollToRowAtIndexPath:[self indexPathForCell:cell] atScrollPosition:UITableViewScrollPositionTop animated:YES];
这在 iOS 6 中运行良好,但在 iOS 7 中不起作用。它也不会产生任何错误。
最佳答案
这里的解决方案很简单
看来tableviewCells的层级发生了变化
所以添加一个额外的 .superview
UITableViewCell *cell = (UITableViewCell*) textField.superview.superview;
成为
UITableViewCell *cell = (UITableViewCell*) textField.superview.superview.superview;
它适用于 iOS 7。
textField.superview.superview 曾经是 UITableViewCell 类的对象(或者更具体地说是我的自定义 UITableViewCell)
现在它是 UITableViewCellScrollView 类的一个对象,您需要获取它的 super View 。
UITableViewCellScrollView 是一个私有(private)子类,显然可以使向左滑动以显示删除按钮
After working this out i found this blogpost which illustrates it nicely
希望这能阻止你们中的一些人拔头发:)
西蒙
关于uitableview - scrollToRowAtIndexPath 在 iOS 7 中停止工作 - ?UITableViewCellScrollView?更改 UITableViewCell 层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19134423/