UIButton不工作在UITableview
有UITableviewcell
- >里面我有4个不同的UIView和3个视图有UIButtons。我想让UIButton
可点击。第一次按钮是可点击的,但是当我进入下一个屏幕并返回时,按钮不起作用。请让我知道如何实现这一点?谢谢!UIButton不工作在UITableview
PHMyTripView * tripsView = [[PHMyTripView alloc] initWithFrame:CGRectMake(10,5,self.frame.size.width-20,cell.frame.size.height)];
tripsView.onBaggageClick = ^{
[weakSelf handleBaggagePurchaseTapped];
};
if ([data count]>0) {
[tripsView fillTripData:[data firstObject]];
[tripsView showAncillaries:self.predictiveManager.upcomingCDAirBookingInfo];
}
[cell bringSubviewToFront:tripsView.bagsButton];
[cell.viewPlaceHolder addSubview:tripsView];
这是因为细胞是可重复使用的,如果你去到另一屏幕的按钮可能有点乱轮入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
。
我认为原因会是倍数。 你可以试试:
- 检查每个按钮的约束你的细胞在cellForRow
- 你可以做addTarget:与相对@selector并在此方法检查对象(数据源)每个按钮相关联的按钮。
- 请勿在您的单元格中使用addSubView,而应使用Xib(或在tableView中的storyboard中定义您的单元格),以便设置约束。
我希望,我帮了你。
谢谢大家的回复,但他们不适合我的情况。 这是答案。由于UITableview在它回到屏幕时重新加载。帧被错误放置,因此按钮无法点击。
使用这一行工作正常的代码。
self.tripsView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
显示全部代码 – hariszaman
我已经更新了代码片段。没有一个答案真的有帮助。我确实更改了按钮的背景颜色,以查看其框架一切正常。但它只是不可点击,而是去了didSelectRowAtIndexPath方法。让我知道任何澄清。非常感谢您的回复。期待正确的答案。 – Laxy