簡體   English   中英

UIButton 在 UITableview 中不起作用

[英]UIButton not working in UITableview

在此處輸入圖片說明 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];

發生這種情況是因為這些單元格是可重復使用的,如果您轉到另一個屏幕,該按鈕可能會在 UI 或功能上混亂到不同的單元格中。

解決這個問題的方法是添加標簽。 您可以定義 cell.tag = indexPath.row * 10 左右。

然后在繪制按鈕時,檢查條件,如果 cell.tag == ?,則添加您的按鈕。

謝謝大家的回復,但他們在我的情況下不起作用。 這是答案。 由於 UITableview 在返回屏幕時正在重新加載。框架被錯誤放置,因此按鈕無法點擊。

使用了這一行代碼,效果很好。

self.tripsView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

您應該關閉每個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 中的故事板中定義您的單元格),以便您可以設置約束。

我希望,我已經幫助了你。

不是專門針對這個問題,但對於某些人來說可能是這種情況。嘗試在單元格的contentView中添加子視圖。 而不是addSubview(textField)使用contentView.addSubview(textField)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM