【问题标题】:Where is the best place to put setup code for a UIViewController;放置 UIViewController 设置代码的最佳位置是哪里?
【发布时间】:2013-08-22 23:01:38
【问题描述】:

我对界面生成器感到非常沮丧,我正在尝试在代码中创建我的视图控制器。我已经设法设置窗口并创建导航控制器并将其添加为根视图控制器...

我不太确定应该从哪里开始添加按钮并设置它们的目标...

我应该将执行此操作的代码放在 UIViewController 的子类中还是其他地方会更好?

一旦我这样做了......放置自动布局约束的最佳位置是什么?

任何帮助将不胜感激。

【问题讨论】:

  • 是的……那是我在提出问题后找到的苹果文档。我不知道我是否应该回答我自己的问题,但苹果希望你覆盖 loadView
  • 重写loadView时要小心,只用于自定义VC的topView。如果您使用 XIB 或 StoryBoard,请在 viewDidLoad 中设置。还要检查 viewWillAppear 和 viewDidLayOutSubViews 中的设置时间

标签: ios objective-c uiviewcontroller


【解决方案1】:

每个视图控制器子类都应该创建和释放自己的按钮、控件、子视图等。

您可以通过覆盖此 UIViewController 方法来完成所有视图控制器设置

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

【讨论】:

  • 我一直在查看苹果文档,我认为他们希望您覆盖 UIViewController 的 loadView 方法并在那里设置整个视图。他们甚至提到了设置约束。
  • @MattZera 如果您完全不使用笔尖,我认为这两者都没有优势。 viewDidLoad 还允许你混合和匹配 nib/code,所以为了保持一致性,我使用那个。
  • '[超级 viewDidLoad];'应始终首先调用。这个想法是告诉超类做它的事情,然后根据需要进行修改。如果你最后调用 super,你的修改可能会被覆盖。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    非常感谢您尝试帮助我。我一直在搜索有关该主题的苹果文档,只是发现苹果希望您覆盖UIViewControllerloadView 方法并在那里设置整个视图。他们甚至谈到了设置约束。我认为您可以在 view did load 中设置它们,因为如果您不覆盖该功能,它会给您一个空视图,但我认为我会安全并按照苹果所说的方式进行操作。

    如果耽误了你的时间,我很抱歉。在问这个问题之前我应该​​多看看。

    - (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];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      相关资源
      最近更新 更多