如何为UserInteraction
单元格禁用UITableview
但不在该单元格的自定义按钮中停用..
我正在创建一个按钮:
UIButton *dayButton = [UIButton buttonWithType:UIButtonTypeCustom];
[dayButton setFrame:CGRectMake(201, 0, 30, 35)];
[dayButton addTarget:self action:@selector(selectDayView) forControlEvents:UIControlEventTouchUpInside];
[dayButton setBackgroundImage:[UIImage imageNamed:@"86-camera.png"] forState:UIControlStateNormal];
dayButton.userInteractionEnabled=YES;
[cell addSubview:dayButton];
然后我设置
cell.userInteractionEnabled=NO;
如何获得dayButtonAction
?
答案 0 :(得分:11)
不要禁用用户与整个单元的交互。设置cell.selectionStyle = UITableViewCellSelectionStyleNone
以阻止选择单元格。这样,用户仍然可以与按钮进行交互。
答案 1 :(得分:3)
如果您设置cell.userinteraction = NO
,则无法触摸该按钮,因为cell
和subviews
已关闭任何互动。
答案 2 :(得分:2)
一个老问题,但认为这可能对某人有所帮助。您可以通过将选择属性设置为无选择来禁用UITableView的用户交互。
答案 3 :(得分:1)
您可以设置[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
也不要实现tblView:didSelectRowAtIndexPath:
。使您可以点击按钮(默认情况下)。处理它的事件以执行您的任务。
据我了解,如果Superview启用userintercation = no
,则子视图无法进行交互。在您的情况下,UITableViewCell是超级视图,按钮是子视图。因此,最好避免设置cell.userInteractionEnabled = NO;
并使用UITableViewCellSelectionStyleNone
。
希望这会有所帮助:)
答案 4 :(得分:1)
如果cell.userinteraction = NO
,则您无法触及subviews
。简单的方法就是UIView
与clearColour
一起使用,视图的大小与您的单元格大小相同,并将其放在单元格和上方视图中,您可以设置UIButton
。当您想cell.userinteraction = NO
时,只需设置view.hidden=NO
,然后设置cell.userinteraction = Yes
,然后设置view.hidden=YES
。因此,您的透明UIView
显示以及上方查看您的UIButton
,然后您就可以获得点击按钮。无需设置cell.userinteraction
。
答案 5 :(得分:1)
还有一个选项是覆盖touchesBegan和touchesEnded。以下是:
1)制作具有覆盖功能的自定义单元格以及应用它们的指示符
class MyCustomTableViewCell: UITableViewCell {
var shouldDisableTouches: Bool = false
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if !shouldDisableTouches { super.touchesBegan(touches, with: event) }
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
if !shouldDisableTouches { super.touchesEnded(touches, with: event) }
}
}
2)在storyboard中,将您的单元格类设置为Custom Class&gt;中的此类。类
3)现在在tableView(_:cellForRowAt :)中你可以打开或关闭交互
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "yourCellIdentifier", for: indexPath) as! MyCustomTableViewCell
if <your condition here> {
cell.shouldDisableTouches = true
} else {
cell.shouldDisableTouches = false
}
}
...&#34; else&#34;部分在这里是必不可少的,不要放弃它。毕竟它是一个可重复使用的细胞。
这种禁用不会影响按钮,这些按钮位于单独的xib中,为此单元注册。 Haven没有在一个单元格上进行测试,直接在故事板中设计。
答案 6 :(得分:0)
无法对UITableView应用禁用userInteraction
,而对UITableViewCell
不应用。{p>当UITableView
启用userInteraction
时,您可以访问UITableVie的内容/控制器(UITabelView
的子视图)。当您在UITableView
上添加任何控制器时实际上已将其添加到UITableViewCell
,但是单元格属于UITableView
,因此当您在userInteraction
上停用UITableView
时,这意味着它也是{为UITableViewCell设置它(NO)。
在此我还建议您将UIButton
添加到单元格作为
[cell.contentView addSubView:buttonName];
答案 7 :(得分:0)
你不能在Cell上设置User Interaction Disabled,因为它是一个超级视图,在其上添加了一个按钮。如果你这样做,你将无法与按钮交互,因此禁用UITableViewCell的其余子视图上的交互。 / p>
答案 8 :(得分:0)
[快速] 对我有用的是 cell.isUserInteractionEnabled = true(我的意思是不要将其设置为false,默认为true)
并设置
cell.selectionStyle = .none