2011-05-29 117 views
0

我正在創建一個通用的iOS應用程序,即它將在iPhone和iPad上運行。我現在有一個UIViewController,它們將以兩種方式顯示,但不同。在iPhone上,它將包含一個UITableView,在iPad上一個AQGridView。數據將是相同的。兩個控制器都會共享很多方法和實例變量。從兩個類繼承

通常,我會用我的方法和實例變量創建一個UIViewController子類,然後創建這個類的兩個子類,並在其中放置特定於設備的內容。

我現在面臨的問題是,我的子類的iPhone版也應該從其他類繼承了一些很好的方法:

  UIViewController sublcass     Some Other Class 
         |          | 
      ------------------------------- ----------------- 
      |        | | 
     iPad sublcass     iPhone subclass 

添加了iPad版本作爲iPhone sublcass的子類是不可能爲Some Other Class旨在與UITableView一起使用。

我很確定這在Objective-C中是不可能的,但是我想在繼續之前詢問並創建一個巨大的副本-paste亂七八糟。所以:關於如何保持我的代碼簡單的任何建議?

+0

正當我看到類似的情況時,我很好奇:爲什麼不在iPhone上使用AQGridView? – mackworth 2011-06-10 19:01:39

+0

我在那裏使用'UITableView',因爲我一次只能顯示大約2個'AQGridViewCell's。 – fabian789 2011-06-11 10:19:58

+0

有趣。你不能讓這些單元的尺寸與UITVC相同嗎? – mackworth 2011-06-11 17:47:43

回答

2

是的,多重繼承在Objective C中是不可能的。然而,在清潔和邏輯設計中,它不是必需的,可以用協議來替代。但是,如果不是你的情況(但是,我有一些疑慮),我建議你檢查decorator design pattern

即使裝飾模式不符合您的需要,我建議您使用聚合而不是繼承(好吧,這是裝飾者實際使用的)。

+0

我以爲這不起作用,因爲'Some Other Class'例如在'-viewDidLoad'中設置了一些'UITableView'。當從iPad子類中調用'[super viewDidLoad]'時,東西就會出錯。無論如何,我現在要研究創建裝飾器。 – fabian789 2011-05-29 16:36:34

+0

姆姆,我想我可以把很多東西放到一個單獨的控制器類中,通過委託通知我的iPad/iPhone的importent事件的子類。所以,我現在要接受你的回答:) – fabian789 2011-05-29 16:43:29