簡體   English   中英

UIButton目標是UIViewController而不是自定義UIView

[英]UIButton target to be UIViewController not custom UIView

我有一個UIViewController ,它創建一個自定義子視圖。 子視圖是一個UIView對象,該對象已經被子類化了幾次。

在子視圖類中,我創建了一個自定義的init方法:

-(id)init {
    self = [super init];
    if (self) {
        // Init code
        [self spm_correctGuessViewCustomInit];
    }
    return self;
}

然后在其中創建一個按鈕和一個標簽。 問題直接與按鈕及其目標動作有關。

我想要的是讓UIViewController具有按鈕操作,而不是UIView的子類(它實際上創建並保存了按鈕)。

[continueButton addTarget:self.superview action:@selector(correctGuessContinueButtonPressed) forControlEvents:UIControlEventTouchUpInside];

我傳入了self.superview的目標,這似乎可以正常工作並且運行了正確的方法。 但是,在子類“未聲明的選擇器'correctGuessContinueButtonPressed”中顯示了警告

那我可以正確實現這種方法嗎? 如果需要更多信息,請告訴我。

您的view.superview方法不會帶您進入視圖控制器,而是帶您進入視圖。

您可以導入實現類的標頭來修復警告,但是我認為您的設計應該得到改進。 視圖應該非常獨立地工作,而不是依賴於它們的超級視圖,甚至更糟的是視圖和控制器的整個體系結構。

我會在用戶按下按鈕時在行下方傳遞一個委托,或者在按鈕觸發時在被調用的視圖上設置一些塊。

避免在多層抽象上進行通信。

一種解決方案是更新自定義視圖的init方法,使其采用targetaction參數(非常類似於按鈕的addTarget:方法)。 然后,您可以通過addTarget:調用將這些值傳遞給按鈕。

- (instancetype)initWithTarget:(id)target action:(SEL)action {
    // your normal init code here
    // use target and action to setup your button
}

參考前面類似的問題: 從子視圖的UIButton調用UIViewController中的方法

  1. 我必須在自定義UIView子類中向該方法所在的View Controller添加一個導入。

  2. 設置好控制器屬性后,我可以將按鈕目標設置為控制器

  3. 確保從按鈕調用的方法在控制器頭文件中,因此可以通過子視圖實現文件看到。 以前不是這樣,所以子視圖不知道它的存在。

暫無
暫無

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

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