Ios UIButton在UITableview中不工作
有Ios UIButton在UITableview中不工作,ios,iphone,uitableview,uibutton,Ios,Iphone,Uitableview,Uibutton,有UITableviewcell-->其中我有4个不同的UIView,其中3个视图有UIView按钮。我想使ui按钮可点击。第一次按钮是可点击的,但当我转到下一个屏幕并返回时,按钮不起作用。请让我知道如何实现这一点?谢谢 PHMyTripView*tripsView=[[PHMyTripView alloc]initWithFrame:CGRectMake(10,5,self.frame.size.width-20,cell.frame.size.height)] 这是因为这些单元格是可重用的,
UITableviewcell
-->其中我有4个不同的UIView,其中3个视图有UIView按钮。我想使ui按钮
可点击。第一次按钮是可点击的,但当我转到下一个屏幕并返回时,按钮不起作用。请让我知道如何实现这一点?谢谢
PHMyTripView*tripsView=[[PHMyTripView alloc]initWithFrame:CGRectMake(10,5,self.frame.size.width-20,cell.frame.size.height)]
这是因为这些单元格是可重用的,如果你转到另一个屏幕,按钮可能会在UI或功能上混乱到不同的单元格中 解决这个问题的方法是添加标签。您可以定义cell.tag=indexPath.row*10左右
然后在绘制按钮时,检查条件,如果cell.tag==?,然后添加按钮。之所以会出现这种情况,是因为单元格是可重用的,如果转到另一个屏幕,按钮可能会在UI或功能上混乱到不同的单元格中 解决这个问题的方法是添加标签。您可以定义cell.tag=indexPath.row*10左右
然后在绘制按钮时,检查条件,如果cell.tag==?,然后添加按钮。您应该在每个
UITableView
子视图上关闭delaysContentTouches
,它是UIScrollView
类的一个实例。
子类UITableView
和重写initWithFrame
方法:
.h文件
@interface NoDelaysOnTouchTableView : UITableView
@end
和.m文件
#import "NoDelaysOnTouchTableView.h"
@implementation NoDelaysOnTouchTableView
- (id) initWithFrame: (CGRect) frame
{
self = [super initWithFrame: frame];
if (self) {
for (id view in self.subviews) {
if ([NSStringFromClass([view class]) isEqualToString: @"UITableViewWrapperView"]) {
if ([view isKindOfClass: [UIScrollView class]]) {
// turn OFF delaysContentTouches in the hidden subview
UIScrollView* scroll = (UIScrollView*)view;
scroll.delaysContentTouches = NO;
}
break;
}
}
}
return self;
}
@end
下一步-使用此子类(创建
NoDelaysOnTouchTableView
的实例)可以立即按下UIButton
。您应该在每个UITableView
子视图上关闭delaysContentTouches
,该子视图是UIScrollView
类的实例。
子类UITableView
和重写initWithFrame
方法:
.h文件
@interface NoDelaysOnTouchTableView : UITableView
@end
和.m文件
#import "NoDelaysOnTouchTableView.h"
@implementation NoDelaysOnTouchTableView
- (id) initWithFrame: (CGRect) frame
{
self = [super initWithFrame: frame];
if (self) {
for (id view in self.subviews) {
if ([NSStringFromClass([view class]) isEqualToString: @"UITableViewWrapperView"]) {
if ([view isKindOfClass: [UIScrollView class]]) {
// turn OFF delaysContentTouches in the hidden subview
UIScrollView* scroll = (UIScrollView*)view;
scroll.delaysContentTouches = NO;
}
break;
}
}
}
return self;
}
@end
下一步-使用此子类(创建
NoDelaysOnTouchTableView
的实例)可以立即按下ui按钮。我认为原因可能是多个。
您可以尝试:
- 检查单元格中每个按钮的约束
- 在cellForRow中,您可以使用相对@selector对每个按钮执行addTarget:操作,并在此方法中检查与按钮关联的对象(数据源)
- 不要在单元格中使用addSubView,而是使用Xib(或在tableView中的故事板中定义单元格),以便设置约束
我希望,我已经帮了你。我认为原因是多方面的。
您可以尝试:
- 检查单元格中每个按钮的约束
- 在cellForRow中,您可以使用相对@selector对每个按钮执行addTarget:操作,并在此方法中检查与按钮关联的对象(数据源)
- 不要在单元格中使用addSubView,而是使用Xib(或在tableView中的故事板中定义单元格),以便设置约束
我希望,我已经帮到你了。谢谢大家的回复,但它们对我的情况不起作用。
答案是这样的。由于UITableview返回屏幕时正在重新加载。帧放置错误,因此按钮无法单击
使用了这一行代码,效果很好
self.tripsView.autoresizingMask=uiviewsautoresizingflexiblewidth | uiviewsautoresizingflexiblewhight 感谢大家的回应,但他们在我的情况下不起作用。
答案是这样的。由于UITableview返回屏幕时正在重新加载。帧放置错误,因此按钮无法单击
使用了这一行代码,效果很好
self.tripsView.autoresizingMask=uiviewsautoresizingflexiblewidth | uiviewsautoresizingflexiblewhight 并不是专门针对这个问题,但对于某些人来说可能是这样。请尝试在单元格的contentView
中添加子视图。
不要使用addSubview(textField)
而使用contentView。addSubview(textField)
并不是专门针对这个问题,但对于某些人可能是这样。尝试在单元格的contentView
中添加子视图。
不要使用addSubview(textField)
而使用contentView.addSubview(textField)
显示整个代码我已经更新了代码片段。没有一个答案真的有用。我确实改变了按钮的背景色,以查看其框架,一切正常。但它只是不可点击,而是转到didSelectRowAtIndexPath方法。让我知道任何澄清。谢谢大家的回复。我已经更新了代码片段。没有一个答案真的有用。我确实改变了按钮的背景色,以查看其框架,一切正常。但它只是不可点击,而是转到didSelectRowAtIndexPath方法。让我知道任何澄清。谢谢大家的回复。期待正确的答案。