iPhone手工制作的视图/控制器

时间:2009-10-23 00:04:37

标签: iphone user-interface

我想知道是否有人知道有任何好的在线资源/教程以编程方式创建视图和控制器,而不是通过界面构建​​器。我已经看过一切使用界面生成器和创建的笔尖,而IB是好,我想有(无论是现实的原因手工开发这些的选项,让这一切是如何结合在一起,而不是肤浅的一个很好的理解你可以通过拖放来获得一件事。)

我的背景是在java中,我发现使用界面构建器开发视图的速度很慢,令人沮丧,就像我有时用Java一样开发视图,即

  • 从域模型以编程方式生成源,然后在需要时调整结果
  • 使用一些元数据和/或反射并动态地将控件添加到视图

此外,一旦我创建了一个视图,无论如何我可以将它添加到界面构建器中,以使其可用作另一个视图的子视图吗?

谢谢,维克

3 个答案:

答案 0 :(得分:1)

Interface Builder方法创建“冻干”对象,当您从NIB初始化对象时,这些对象在运行时重新创建。它仍然执行相同的allocinit内容,使用NSCoder个对象将对象带入内存。

如果您希望拥有基于特定NIB的视图控制器,则可以覆盖默认的init方法,并根据该视图控制器的NIB启动它。例如:

@implementation MyViewController
-(id) init {
    if (self = [super initWithNibName:@"MyViewController" bundle:nil]) {
        //other setup stuff
    }
    return self;
}

当您想要显示MyViewController时,您只需调用以下内容:

- (void) showMyViewController {
    MyViewController *viewController = [[[MyViewController alloc] init] autorelease];
    [self presentModalViewController:viewController animated:YES];
}

现在,如果您想手动而不是在Interface Builder中创建视图,则根本不需要更改-showMyViewController方法。摆脱-init覆盖,改为覆盖-loadView的{​​{1}}方法以编程方式创建它:

MyViewController

此示例显示如何创建视图并向其添加按钮。如果您想保留对它的引用,请以与使用NIB(没有IBOutlet / IBActions)相同的方式声明它,并在分配时使用- (void) loadView { UIView *view = [[UIView alloc] initWithFrame:CGRectMake(320,460)]; self.view = view; [view release]; //Create a button UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [myButton addTarget:self action:@selector(pressedButton) forControlEvents:UIControlEventTouchUpInside]; [myButton setTitle:@"Push Me!" forState:UIControlStateNormal]; myButton.frame = CGRectMake(100,230,80,44); [self.view addSubview:myButton]; } 。例如,您的标题可能如下所示:

self

你的班级:

@interface MyViewController : UIViewController {
    UIButton *myButton;
}

- (void) pressedButton;

@property (nonatomic, retain) UIButton *myButton;

@end

答案 1 :(得分:0)

几个月前,当我想在Emacs中进行所有iPhone开发时,我遇到了同样的问题。长话短说:我不再为iPhone开发了:)

我仍然建议您查看我的问题和一些有用的答案here

答案 2 :(得分:0)

我通常不会过多地使用Interface builder来进行iPhone开发。通常我会在这样的代码中创建一个视图控制器

MyUIViewControllerSubclass *controller = [[MyUIViewControllerSubclass alloc] initWithNibName:nil bundle:nil];
controller.someProperty = myModel;
[self presentModalViewController:controller];
[controller release];

或者那些东西。通常我会创建一个UIViewController的子类,这就是我布置视图等的地方。视图是UIView的子类(Apple提供的内容类似于UIButton等,或者我自己创建的内容)。如果您同时阅读了UIViewControllerUIView,那么您应该对其工作原理有所了解。