2016-07-15 69 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;