2016-07-15 64 views
0

enter image description hereUITableviewcell - >里面我有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]; 
+1

显示全部代码 – hariszaman

+0

我已经更新了代码片段。没有一个答案真的有帮助。我确实更改了按钮的背景颜色,以查看其框架一切正常。但它只是不可点击,而是去了didSelectRowAtIndexPath方法。让我知道任何澄清。非常感谢您的回复。期待正确的答案。 – Laxy

回答

2

这是因为细胞是可重复使用的,如果你去到另一屏幕的按钮可能有点乱轮入UI或功能不同的细胞。

解决这个问题的方法是添加标签。你可以定义cell.tag = indexPath.row * 10左右。

然后,当绘制按钮,你检查条件,如果cell.tag ==?,然后添加您的按钮。

0

您应该在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

0

我认为原因会是倍数。 你可以试试:

  • 检查每个按钮的约束你的细胞在cellForRow
  • 你可以做addTarget:与相对@selector并在此方法检查对象(数据源)每个按钮相关联的按钮。
  • 请勿在您的单元格中使用addSubView,而应使用Xib(或在tableView中的storyboard中定义您的单元格),以便设置约束。

我希望,我帮了你。

0

谢谢大家的回复,但他们不适合我的情况。 这是答案。由于UITableview在它回到屏幕时重新加载。帧被错误放置,因此按钮无法点击。

使用这一行工作正常的代码。

self.tripsView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;