我在iOS中创建了一个基本上是文件夹列表的屏幕。它可以包含文件和文件夹。当我点击一个文件夹时,我希望有一个新的屏幕显示该文件夹的内容。但是,我想用文件做几件事。
我有UITableView
个自定义UITableViewCell
。在它上面有两个按钮,我只想在文件行上执行操作。一个按钮执行segue到另一个视图控制器(以查看属性)。第二个按钮执行操作(下载文件)。对于文件夹,我还将accessoryType
设置为UITableViewCellAccessoryDisclosureIndicator
。还有一个tableView:didSelectRowAtIndexPath:
方法执行检查以查看它是否是文件夹并显示新屏幕(如果是)。 (虽然我不知道是否有必要进行检查,因为accessoryType
只会调用文件夹。
我的问题(我认为)是操作顺序弄乱了文件夹项目。
在文件夹上,如果我点击触发文件segue的按钮,则会在tableView:didSelectRowAtIndexPath:
方法之前调用prepareForSegue:sender:
方法。所以我的文件夹正确地做了自己的segue。但是,如果我点击操作按钮,则会先调用操作,并且不会调用tableView:didSelectRowAtIndexPath:
。
似乎UITableViewCellAccessoryDisclosureIndicator
设置会覆盖segues,但不会覆盖操作。
我是否可以从操作中返回一个结果,或者我可以调用的其他方法,以指示按钮操作未处理且父操作应该触发?我知道在Windows应用程序中经常允许这样做,但我不知道Objective-C中是否有类似的支持。
我目前的解决方法是在操作中添加一项检查以查看它是否是文件夹,然后执行我在tableView:didSelectRowAtIndexPath:
中通常执行的所有步骤。这是有效的,但我希望有一个更优雅的解决方案。如果我在同一张表中可以有两个不同的UITableViewCell
,我也会去研究。
答案 0 :(得分:0)
我认为您需要为tableView:accessoryButtonTappedForRowWithIndexPath:
函数添加处理程序,以便在用户点击附件按钮时捕获事件。并最终从此函数调用相同的代码,如果您希望它们以相同的方式运行,则从tableView:didSelectRowAtIndexPath:
调用。
答案 1 :(得分:0)
简而言之,为了回应你关于在一个表中有多种类型的UITableViewCells的最终评论,答案是肯定的。对于您的问题,这将是一个更清洁的解决方案。
在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
中创建单元格时可以使用不同的单元格标识符。
如果您使用带有Dynamic Prototypes
的UITableView,则可以向表中添加另一个单元格,并在Attributes Inspector下为其提供不同的标识符(重用标识符)。生成单元格时,只需在设置dequeueReusableCellWithIdentifier:
方法时调用替代标识符即可。