如何以编程方式创建iOS应用视图

时间:2013-04-01 15:25:47

标签: iphone ios objective-c uiview uiviewcontroller

我正在编写一个应用程序而不使用storyboards / xib来创建视图,并且不确定放置视图设置代码的最佳位置。我尝试了几种不同的方法,但我不确定将视图设置代码与控制器代码分开的最佳方法。

到目前为止,我尝试过的方法是:

  1. 将所有视图设置代码(创建和定位按钮/标签)等放在控制器viewDidLoad方法中。我很确定这是一种糟糕的做事方式,因为你最终会在控制器中输入大量代码。

  2. UIView进行子类化并在initWithFrame方法中设置界面元素。然后我在视图控制器视图的顶部添加此视图。

    _customView = [[CustomView alloc] initWithFrame:self.view.frame];
    _customView.customLabel.text = @"Foo";
    [self.view addSubView:_customView]
    
  3. 或者我将控制器视图指定为我的customView

    _customView = [[CustomView alloc] initWithFrame:self.view.frame];
    self.view = _customView;
    _customView.customLabel.text = @"Foo";
    

    虽然尽量将此问题视为非主观问题,但是有一种以编程方式创建iOS界面的最佳做法吗?这些方法中的任何一种都是保持视图代码和控制器代码分离和可重用的好方法吗?

1 个答案:

答案 0 :(得分:1)

如果您只需要使用该视图一次,请将代码保留在viewDidLoad方法中。也许您可以移动在控制器中以特定方法创建视图所需的代码。

- (void)viewDidLoad
{
    [super viewDidLoad];

    // other code here...
    [self createView];
}

此外,如果您的视图是控制器的loadView,您还可以考虑覆盖view方法并将代码放在那里。来自Apple doc。

  

您可以覆盖此方法以手动创建视图。   如果选择这样做,请将视图层次结构的根视图指定给   视图属性。

如果您需要多次实例化您的视图,我将子类化UIView并使用委托模式与您的控制器进行通信。

如果选择此方法,则需要覆盖layoutSubviews方法以在视图中排列子项。

可以在How To Make a Custom UIView in iOS 5: A 5 Star Rating View中找到一个明显的例子。