2011-05-29 69 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