![](/img/trans.png)
[英]How to add UIViewController as target of UIButton action created in programmatically created 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
方法,使其采用target
和action
參數(非常類似於按鈕的addTarget:
方法)。 然后,您可以通過addTarget:
調用將這些值傳遞給按鈕。
- (instancetype)initWithTarget:(id)target action:(SEL)action {
// your normal init code here
// use target and action to setup your button
}
參考前面類似的問題: 從子視圖的UIButton調用UIViewController中的方法
我必須在自定義UIView
子類中向該方法所在的View Controller添加一個導入。
設置好控制器屬性后,我可以將按鈕目標設置為控制器
確保從按鈕調用的方法在控制器頭文件中,因此可以通過子視圖實現文件看到。 以前不是這樣,所以子視圖不知道它的存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.