我UITableView在我的应用程序中使用了一个,当点击时,它将用于UINavigationController将另一个视图控制器推送到导航控制器的视图控制器堆栈.
然而,当tableview上的一个单元格被双重绑定时,tableView:didSelectRowAtIndexPath:会被调用两次,导致导航控制器将两个新的viewcontroller推入堆栈并导致以下控制台输出:
nested pop animation can result in corrupted navigation bar
Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
Run Code Online (Sandbox Code Playgroud)
这不是一个非常重要的问题,因为用户不太可能对表视图单元格进行双击,但是我想知道是否有一种优雅的解决方案可以防止这种误导?(可能检查导航控制器topViewController并随后决定是否pushViewController:应该实际执行推送方法?).
Pan*_*cho 12
只是设置userInteractionEnabled为NO这样
在你的 viewWillAppear
-(void)viewWillAppear:(BOOL)animated
{
// if you return from another viewController
[tableView setUserinteractionEnabled:YES];
}
-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// do your logic here and at the end just set user interaction to NO
[tableView setUserInteractionEnabled:NO];
}
Run Code Online (Sandbox Code Playgroud)
这将阻止所有用户与您的tableview进行交互.
小智 7
我发现这里描述的问题的修复程序是将所有的didSelectRowAtIndexPath代码包装在以下检查中:
if ([[self navigationController] topViewController] == self) {
[your existing didSelectRowAtIndexPath code here]
}
Run Code Online (Sandbox Code Playgroud)
这将检查是否已将另一个视图控制器推送到视图控制器堆栈的顶部(并且仍在等待由于某种原因实际出现在屏幕上).
我相信其他地方提到的multiTouchEnabled属性实际上是指多点触控功能,它允许iOS同时注册多个触摸事件(例如,同时使用两个手指在屏幕上进行双指缩放)而不是多个顺序触动.
乔丹索伦森现代化迅速:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
if self.navigationController?.topViewController == self
{
self.performSegueWithIdentifier("whatever", sender:self)
}
else{
// uncomment to break in else case print("fasttaper's superfluous input was ignored")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8345 次 |
| 最近记录: |