当didSelectRowIndexPathRow被调用时禁止用户交互
问题描述:
因此,当用户选择一行时,出于性能原因,我将选择放在另一个线程上。当我将它从主线程中取出时,该行将被取消几秒钟,并被推送到下一个视图。当行被取消选择并从主线程中取出时,用户可以选择再次快速点击该行,并再次强制应用程序崩溃。所以我的问题是如何取消选择didSelectRowAtIndexPath
方法中的表格行上的用户交互?现在,请确认我不希望在选中一行之前禁用用户交互。我只想在行被选中后禁用单元格上的用户交互。谢谢!当didSelectRowIndexPathRow被调用时禁止用户交互
答
使变量实例NSIndexPath selectedPath;
添加
[[self.tableView cellForRowAtIndexPath:indexPath] setUserInteractionEnabled:NO];
selectedPath = indexPath;
到您的didSelectRowAtIndexPath方法和performSegueWithIdentifier(假设你使用故事板)添加
[[self.tableView cellForRowAtIndexPath:self.selectedPath] setUserInteractionEnabled:YES];
我建议实例级'布尔'(类似'processingRow'),并在你点击一行时启用它。然后,当后台线程结束时,禁用它。使它只要启用,就不能选择另一行(或同一行,或者你希望它工作)。 – Stonz2 2014-09-03 14:57:22
因此,你的说法使得单元对象的范围是全局的,所以我可以调用'processingRow'方法并在'processingRow'方法中禁止用户交互? – wayon 2014-09-03 15:02:55
不,我要说的是添加一个知道你是否正在处理的'bool'。我想如果你需要一次处理多行并且只想在处理时禁用单行,你可以为每行创建一个'bool'数组,或者保存一个'indexPath'对象数组,在开始处理时添加当前的'indexPath',并在完成时将其删除,因此如果在选择行时您的'indexPath'已经存在于该数组中,则不要对其执行任何操作。 – Stonz2 2014-09-03 15:28:42