Xcode为所有视图动态加载GUI

时间:2012-07-18 02:34:30

标签: iphone objective-c xcode cocoa

我是Xcode和Objective C的新手。

我已经成功地在我的一个视图上加载了所有GUI对象..

现在我想在我的全部或大部分视图上重复相同的动态加载内容..

我在主视图中有一个像这样的方法:

-(void)loadinfo:(id)sender{
//All dynamically loaded content etc..
}

我目前有主视图这样调用这个方法。

[self loadinfo];

所以现在我需要知道(没有将方法复制并粘贴到我的所有视图中)如何将方法从主视图调用到其他视图中?

我希望这一切都有道理。

修改

我对PHP更了解,所以如果我在php中做同样的事情,我会创建一个名为functions.php的文件,并将该文件包含在所有页面中。这是相同的概念吗?

2 个答案:

答案 0 :(得分:0)

您应该为包含所有动态加载的UI内容的视图创建子类。所以如果你有:

@interface MyCustomView : UIViewController 
{

}

@property (strong, nonatomic) UIView *aView;

-(void)someMethod;

@end

您可以创建一个继承所有属性,方法等的子类:

@interface FirstView : MyCustomView 
{

}

//all properties and methods of MyCustomView are inherited

@end

对要创建的任意数量的视图执行此操作。

答案 1 :(得分:0)

这个概念与您在PHP中使用函数找到的方法不同。在Objective C中,一个用于对象。要在对象之间共享行为(您的PHP函数,在Objective C中称为方法),您需要将该行为插入到类层次结构中。

因此,对于您的具体情况,您将在通用类中实现loadinfo方法,该类是NSView的子类,比如说MyGenericView。然后,您的view1view2类将从该泛型类继承,并继承loadinfo方法。

如果您想转移基类中loadinfo的实现,可以通过执行(在view1或view2中)部分覆盖它:

- (void) loadview {
  [super loadview]; // perform the default implementation
  [self doSomethingDifferint]; // perform subclass specific stuff
}

......或:

- (void) loadview {
  [self doSomethingDifferint]; // perform subclass specific stuff
  [super loadview]; // perform the default implementation
}

...或完全覆盖:

- (void) loadview {
  [self doSomethingCompletelyDifferent]; // perform subclass specific stuff
}

请注意:在Objective C中命名类和方法时遵循CamelCase标准是一种好习惯,因此您的类将是View1View2,方法将是{{1 }}

此外,您可能希望read up on generic OO principles and Objective C的具体方面充分利用语言及其功能。