是否可以在UITableView的行的一部分中禁用didSelectRowAtIndexPath?
我的Objective C应用程序中有一个UITablaView
。 我有自定义单元格标签和UIImageView
。 我想禁用部分行,以便在用户单击此行的部分时禁用didSelectRowAtIndexPath
。
我要这个:
可能吗?
这是我能想到的简单而最优雅的解决方案。
我相信你必须有一个CustomCell,它将IBOutlet保存到左侧的imageView :)你可以利用hitTest
方法来解决你的问题:)
在你的CustomCell中让我们假设它是MyTestCell类写的,
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { if self.myImageView.frame.contains(point) { return nil } return super.hitTest(point, with: event) }
其中myImageView是你单元格左侧的imageView的IBOulet 🙂
我正在做的就是检查用户点击的位置,如果触摸点位于单元格框架中,则返回nil作为视图。 当你返回nil touch事件停止传播到它的父视图,最后永远不会到达单元格因此didSelectRowAtIndexPath
从未调用,
另一方面,您应该将触摸切换到下一个视图,只需在其super
iOS上调用相同的方法,最终将其追溯到单元格并触发didSelectRowAtIndexPath
希望能帮助到你 :)
您可以通过添加一个覆盖要禁用其选择的部分的按钮来执行一个简单的技巧(无需编写代码)来解决此问题。 显然,按钮不应该有任何文本或背景颜色(它应该是清晰的颜色),还要确保添加适当的约束,以确保覆盖单元格的所需部分。
因此,当点击按钮时,什么都不应该发生,并且didselectRow
不应该被调用,因为实际的触摸事件应该被引用到按钮而不是行。
希望这有帮助。
这是一个非常简单的技巧,在轮廓图像部分添加一个按钮,在图片中显示的红色部分(由您提供)。 点击按钮点击不要做。
快乐的编码!!!!
只需将按钮放在绿色区域上,然后为每个按钮设置标签。 单击,您可以使用标记执行function。 喜欢这个
内
func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ let obj: AnyObject = self.dataList.objectAtIndex(indexPath.row); cell?.populateCellWithData(obj, indexPath: indexPath) cell?.destinationLabel.userInteractionEnabled = true let destRecognizer : UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "DestLabelTapped:") destRecognizer.numberOfTapsRequired = 1 destRecognizer.delegate = self cell?.destinationLabel.addGestureRecognizer(destRecognizer) }
根据我的理解,包含内容的按钮和其他UIElements的技巧不是解决目标的正确方法。 因为您需要在Storyboard中对它们进行额外的操作,如果您需要动态制作内容,如果您将使用约束以及更多需要控制内容和+人工封面的情况。 有几件事要做:
- 将
UITableView
选择设置为No Selection
- 在
UIView
放置要激活的第二部分。 这个UIView将是内容容器。 -
将
UITapGestureRecognizer
添加到UIViewUITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectCellAction:)];
-
将
IBAction
添加到您可以做的所有事情中。- (IBAction)selectCellAction:(id)sender { // do what you need }
就这样。
您可以简单地将图像视图width constraints to 0
更改width constraints to 0
。 你想要采取行动的地方。 例如:
1)如果使用覆盖图像的按钮。
2)如果您使用导航栏,那么您可以按一个按钮并执行操作。
希望这会有所帮助。