2013-08-22 110 views
3

我刚刚对界面构建器感到沮丧,我试图在代码中创建视图控制器。我已经成功地设置窗口,并创建一个导航控制器,并将其添加为根视图控制器...哪里是放置UIViewController的设置代码的最佳位置;

我不太清楚,我应该开始添加按钮并设定他们的目标......

我应该把代码做在UIViewController的子类中吗?还是会在其他地方更好?

另外,一旦我这样做了......什么是放置自动布局约束的最佳场所?

任何帮助,将不胜感激。

+0

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html –

+0

是啊......那是苹果的文档,我发现后,我问的问题。我不知道我是否应该回答我自己的问题,但苹果希望你覆盖loadView –

+0

当覆盖loadView时,小心使用自定义VC的topView。如果您使用XIB或StoryBoard,请在viewDidLoad中进行设置。另外检查安装时viewWillAppear和viewDidLayOutSubViews –

回答

4

每个视图控制器子类应该创建并发布自己的按钮,控制子视图等

您可以通过重写此UIViewController方法做的所有视图控制器设置

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    ... 
    UIButton* newButton = [UIButton buttonWithType:...]; 
    // other button config (including constraints) 
    [self addSubview:newButton]; 
    ... 
    // create and setup other subviews 
} 
+0

我一直在寻找通过苹果文档,我认为他们希望你重写UIViewController的loadView方法,并设置整个视图。他们甚至提到设置约束条件。 –

+0

@MattZera如果你完全没有笔尖,我看不出任何优势。 viewDidLoad也允许你混合和匹配笔尖/代码,所以为了保持一致性,我使用那个。 –

+0

@MattZera http://stackoverflow.com/questions/8876212/proper-use-of-loadview-and-viewdidload-with-uiviewcontroller-without-nibs-xibs –

2

每个视图控制器应该是它自己的自定义类扩展UIViewController(或UITableViewController等)。这样,每个视图控制器的所有逻辑都包含在它自己的类中。

我所做的是覆盖viewDidLoad(不要忘记致电[super viewDidLoad];)创建,设置和添加视图控制器所需的所有子视图。这也是您设置每个子视图的约束或自动调整掩码的位置。

如果您需要执行任何自定义布局,请在viewWillLayoutSubviews方法中执行此操作。

0

非常感谢你试图帮助我。我一直在搜索有关该主题的苹果文档,并发现苹果希望您覆盖UIViewControllerloadView方法并在那里设置整个视图。他们甚至谈到了设置约束的一些事情。我认为你可以在视图中设置它们,因为如果你不覆盖这个函数,它会给你一个空的视图,但我认为我会安全的,并按照苹果公司的说法这样做。

对不起,如果我放弃了你的时间。在提出这个问题之前,我应该多看看。

- (void)loadView 
{ 
    CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame]; 
    UIView *contentView = [[UIView alloc] initWithFrame:applicationFrame]; 
    contentView.backgroundColor = [UIColor blackColor]; 
    self.view = contentView; 

    levelView = [[LevelView alloc] initWithFrame:applicationFrame viewController:self]; 
    [self.view addSubview:levelView]; 
} 
相关问题