2011-06-11 56 views
0

我是iOS開發新手。我有兩個表視圖和內容細節圖是這樣的:如何讓UITableView繼承UIViewController的自定義子類?

PopularContentViewController : UITableViewController 
LatestContentViewController : UITableViewController 
ContentDetailViewController : UIViewController 

我想添加一些認證,使得任何這些控制器被加載之前,我可以保證用戶登錄,如果沒有,顯示一個模式登錄視圖控制器。

我的想法是創建我自己的UIViewController子類(比如AuthenticatedViewController),並讓我的其他控制器繼承它。問題是,我該怎麼做這樣的事情:

PopularContentViewController : UITableViewController : AuthenticatedViewController 
LatestContentViewController : UITableViewController : AuthenticatedViewController 
ContentDetailViewController : AuthenticatedViewController 

我發現這個類似的問題:Can I create a UITableViewController that inherits from a custom subclass of UIViewController?

...但我不知道是否有另一種方式做多繼承或創建這個其他我自己的UITableViewController擴展了我的AuthenticatedTableViewController?也許通過協議或使用委託代替?只是在正確的方向尋找推動。

回答

1

Uitableviewcontrollers是一個UIViewController。但是你正在以這種錯誤的方式去做。創建一個用於認證的根視圖控制器,可能將其放置在導航控制器中。然後,一個用戶通過身份驗證,將其中一個桌面視圖控制器推入堆棧(或者在運行時完全替換原始控制器並保存憑據)。 ...

或者,如果您堅持,請使用類別或單例來處理身份驗證後端問題(如果可能,請將UI留出)。我會去每個作業的一個視圖控制器(在導航控制器容器中)...簡化,人工,簡化。

+0

是的,這與我考慮的另一種方式類似:檢查應用程序委託中的憑據,如果它們無效,則放置一個模式登錄視圖控制器。一旦他們登錄,我會加載我的根視圖控制器(一個UITabBarController)。我不喜歡這種方法的唯一原因是它基本上鎖定了整個應用程序,並且可能有一些不需要被鎖定的視圖(比如說,只有一個選項卡)。也許這不是一個交易破壞者。 – markquezada 2011-06-12 09:49:29

+0

您可以啓用/禁用選項卡欄中的選擇性選項卡項目。當網絡不可用時,我使用它來關閉部分應用程序。因此,運行您的支票並禁用這些標籤,直到他們登錄。其餘的標籤仍然可用。 – 2011-06-14 03:43:19

1

在objective-c中,你只能從一個超類繼承。沒有辦法繼承多個類。您可以嘗試其他方法,例如可以將AuthenticatedViewController保留在appDelegate中,並且可以從任何類訪問它,因爲appDelegate是單例類。這樣你就可以實現你想要的功能。

+0

我試圖遠離單身的方式,因爲它感覺有點不雅,但也許我錯了。我是iOS開發的新手,所以我想看看是否有其他人用來實現這種事情的更好的通用方法。感謝您的輸入。 – markquezada 2011-06-12 09:52:57