簡體   English   中英

如何將 UIButton 從我的自定義 UIControl 按下到我的視圖 controller?

[英]How do I pass the UIButton pressed from my custom UIControl to my view controller?

我有一個帶有 3 個UIButton的自定義UIControl

3 用戶界面按鈕

UIControl嵌入在視圖 controller 內的UIView (黃色矩形)中:

界面視圖

每個按鈕都有不同的標簽(tag1、tag2、tag3)。 我需要確定在 controller 視圖中按下了哪個按鈕。

我正在嘗試在UIControl中使用sendActionsForControlEvents將其發送到視圖 controller。

[self.button1 sendActionsForControlEvents:UIControlEventTouchUpInside];
[self.button2 sendActionsForControlEvents:UIControlEventTouchUpInside];
[self.button3 sendActionsForControlEvents:UIControlEventTouchUpInside];

在我看來,我不知道如何接收它 controller 以及如何識別按下了哪個按鈕。

誰能幫我?

謝謝。

我解決了創建@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *tabsCollection; 在我的 UIControl 中。

然后在我的 ViewController 中創建一個循環來迭代這個 IBOutletCollection 並在每個按鈕上添加一個動作來控制觸摸事件。

    for (button in self.customTabsComponent.tabsCollection) {
        [button addTarget:self 
                   action:@selector(tabPressed:) 
         forControlEvents:UIControlEventTouchUpInside];
}

首先,明確職責。 如果您開發一個管理按鈕集合的自定義控件,它應該負責接收這些按鈕中的操作並通過其自己的接口將它們轉發到視圖 controller。

您的觀點 controller 根本不應該負責管理這些按鈕。

否則,如果管理按鈕和代碼的責任在您的視圖 controller 內,那么您的自定義控件不是獨立的,不是可重用的控件。 如果不將該代碼復制粘貼到使按鈕工作的視圖 controller 中,您將無法將其與另一個視圖 controller 一起使用。

現在,如果您的自定義控件是 UIControl 的子類,則您不能使用sendActionsForControlEvents來傳遞點擊了哪個按鈕的信息,因為該界面旨在具有一個操作,但針對不同的事件類型。 您需要的是不同的操作,或某種指示點擊了哪些按鈕的附加信息。

UIAlertController為例。 其中一種方法是實現一個動態的動作數組,它將在您的視圖 controller 中創建,傳遞給您的自定義控件並由按鈕調用。 您的按鈕需要在您的自定義控件中動態分配。 更多的工作,但這將是最合適的方法。

如果您想擁有一組 static 按鈕,您可以將塊類型的屬性添加到您的自定義控件。 不同的按鈕會調用不同的塊。

或者,您可以創建一個新的委托協議並傳遞按下按鈕的索引,請參閱 UIAlertViewDelegate。 這是一個有點老派的方法,在塊可用之前使用。

暫無
暫無

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

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