有UITableviewcell
- >在其中我有4个不同的UIView和3个视图有UIButtons。我想让UIButton
可点击。这些按钮第一次是可点击的,但当我进入下一个屏幕并返回时,按钮不起作用。请告诉我如何实现这个?谢谢!
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];
答案 0 :(得分:2)
发生这种情况是因为单元格是可重复使用的,如果你转到另一个屏幕,那么按钮可能会在UI或功能上陷入不同的单元格。
解决这个问题的方法是添加标签。您可以定义cell.tag = indexPath.row * 10左右。
然后在绘制按钮时,检查条件,如果是cell.tag == ?,则添加按钮。
答案 1 :(得分:0)
您应该在每个delaysContentTouches
子视图上关闭UITableView
,该子视图是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
。
答案 2 :(得分:0)
我认为原因可能是倍数。 你可以尝试:
我希望,我帮助了你。
答案 3 :(得分:0)
感谢大家的回复,但他们不能解决我的问题。 这是答案。由于UITableview在返回到屏幕时正在重新加载。框架错误放置,因此按钮无法点击。
使用这一行代码,工作正常。
self.tripsView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
答案 4 :(得分:0)
不是专门针对此问题,但对于某些人来说可能是这样。尝试在单元格的contentView
中添加子视图。
代替addSubview(textField)
使用contentView.addSubview(textField)