我的Objective C应用程序中有UITablaView
。我有自定义单元格,标签和UIImageView
。我想禁用部分行,以便在用户单击此行的部分时禁用didSelectRowAtIndexPath
。
我想要这个:
有可能吗?
答案 0 :(得分:7)
这是我能想到的简单而最优雅的解决方案。
我相信你必须拥有一个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
希望有所帮助:)
答案 1 :(得分:1)
您可以通过添加一个覆盖要禁用其选择的部分的按钮来执行简单技巧(无需编写代码)来解决此问题。显然,按钮不应该有任何文本或背景颜色(它应该是清晰的颜色),还要确保添加适当的约束,以确保覆盖单元格的所需部分。
因此,当点击按钮时,什么都不应该发生,didselectRow
不应该被调用,因为实际的触摸事件应该被引用到按钮而不是行。
希望这会有所帮助。
答案 2 :(得分:0)
您可以直接更改图片视图width constraints to 0
。你想要采取行动的地方。例如:
1)如果使用覆盖图像的按钮。
2)如果你拿一个导航栏然后你拿了一个按钮并执行动作。
希望这会有所帮助。答案 3 :(得分:0)
这是一个非常简单的技巧, 在个人资料图片部分添加一个按钮,表示红色部分,如图所示(由您提供)。点击按钮点击不要这样做。
快乐编码!!!!
答案 4 :(得分:0)
只需将按钮放在绿色区域上,然后为每个按钮设置标签。单击,您可以使用标记执行功能。喜欢这个
里面
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)
}

并且在DestLabelTapped中你可以执行你的功能
另一种方式 只需设置两个Tableview并将它们并排滚动,一个表可选,另一个表不可。 (不要这样做)
答案 5 :(得分:0)
在我的理解中,包含内容的按钮和其他UIElements的技巧不是解决目标的正确方法。由于您需要在Storyboard中对它们进行额外的操作,如果您需要制作动态内容,如果您将使用约束以及更多需要控制内容和+人工封面的情况。有几件事要做:
UITableView
选项设为No Selection
UIView
中。这个UIView将是内容容器。将UITapGestureRecognizer
添加到UIView
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectCellAction:)];
将IBAction
添加到您可以做的所有事情。
- (IBAction)selectCellAction:(id)sender
{
// do what you need
}
就是这样。