簡體   English   中英

如何優雅地從嵌套的自定義視圖向控制器發送回調消息?

[英]How to send callback message from nested custom view to controller elegantly?

例如:

有一個帶有redCustomViewcontroller ,其中一個greenCustomView ,一個帶有buttonbuleCustomView

題:

單擊button時如何向controller發送回叫消息?

我的解決方案:

  1. 使用blcok to block按視圖發送回調消息;
  2. 使用delegate to delegate按視圖delegate to delegate發送回調消息;
  3. 使用notification將回調消息從view直接發送到controller

問題:

使用blockdelegate顯得如此龐大;

使用notification 每個人都可以收到此通知消息,所以我認為這不是更好的方法。

奇跡:

還有其他更好的方法來優雅地解決此問題嗎?

從長遠來看,您需要使基本體系結構簡潔且可測試。 因此,我建議使用MVVM方法,並使用綁定的概念通過viewController的回調函數來完成您想做的任何事情。 使用此方法,您的視圖模型將綁定到您的視圖,並在單擊按鈕時自動調用代碼。
當您開始發現這一點時,您將同時看到大量的viewController逐漸變為簡潔明了的類。 如果您不太了解MVVM綁定 ,則對您而言它看起來像中文。 但是請相信我,一旦您習慣了,便會毫不猶豫地使用它。

我要做的就是沿着響應者鏈走,直到我來到視圖控制器為止。 在您的用例中,這很簡單-單擊按鈕-因為您要做的就是為按鈕賦予nil-targeted動作 ,運行時將在視圖控制器中為您找到處理程序實現。

要找到優雅的解決方案,只需看一下蘋果自己的觀點即可。 例如,UITableView具有必須采用UITableViewDelegate協議的委托。 通過視圖(例如tableview:didSelectRowAtIndexPath :)向委托通知用戶交互。 因此,在這種情況下,“優雅的解決方案”是協議/代理。 但是,如果要在viewDidLoad中構建視圖層次結構,而不是構建一個真正的自定義視圖(例如UIControl的子類),那么target-action方法是一種常見的解決方案。

暫無
暫無

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

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