2012-04-15 51 views
0

我爲我的應用程序構建了一個UITableViewController,它與我的核心數據模型交互。它的主要目的是被推到導航控制器上,並顯示實體列表,並允許我編輯/選擇和深入到信息他們等...使用UIViewController進行協議

但是,在我的應用程序的其他地方,我現在想modally顯示一個簡單的選擇器來選擇其中一個實體。我認爲實現這個最好的方法是建立一個協議來處理可以發送消息給我的代表關於用戶是否取消或選擇實體等的選擇器...

由於這麼多的編碼將是同樣,我的問題是:是否有可能/或以任何方式建議啓用UITableViewController作爲協議?

即當正常顯示時,它的行爲與當前(UIViewController的標準子類)一樣,但是也可以通過代理以模態方式呈現並將消息傳遞給委託?

對最佳實踐的看法很敏感嗎?

回答

1

你甚至不需要一個正式的協議。從其他控制器實例化時,只需給你的UITableViewController一個@property (nonatomic, assign) id delegate即可。將其設置爲代表。使用id不要將您的課程緊密結合,也不要保留該代表。

在調用控制器中執行didCancelPicking...:(id)senderdidPick...:(id)sender item:(id)pickedItem的兩種方法。

現在,當以模態方式查看UITableViewController時,您需要做兩件事。提供取消按鈕+對此作出反應(didCancelPicking...),並可能修改tableView:didSelectRowAtIndexPath:以將didPick...發送給代表。始終使用respondsToSelector:測試代表,並在performSelector:withObject:的情況下進行測試。始終將發件人作爲這些委託方法的第一個參數。

此外,始終顯示和隱藏調用類的模式控制器。例如,不要讓它從UINavigationController中移除。

這些都是我可以從帽子頂部思考的最佳實踐。

關於你在這裏的特定代碼重用:你必須決定你的代碼是否太亂,當你重用那個UITableViewController並想改變它在模態顯示時的行爲。例如。您以後可能想要防止在這種情況下進行編輯和挖掘。您當然可以將其封裝在if (self.delegate)支票中,但是...

相關問題