将UIViews拖入故事板并以编程方式创建它们之间的区别?

时间:2014-01-29 04:00:24

标签: ios objective-c storyboard

您好我是iOS编程的新手,我想知道将UIView拖入故事板并以编程方式创建它们之间有什么区别。 我正在使用iPad进行开发。我有UISplitView。在Appdelegate.m内,我以编程方式创建了UISplitViewController

    MyTableViewController* orders = [[MyTableViewController alloc] initWithClassName:@"Order"];
    MyDetailsViewController* details = [[MyDetailsViewController alloc] init];
    UISplitViewController* splitViewController = [[UISplitViewController alloc] init];
    splitViewController.viewControllers = [NSArray arrayWithObjects: orders, details, nil];
    self.window.rootViewController = splitViewController;
    [self.window makeKeyAndVisible];

在故事板中,我将根视图控制器的类设置为MyTableViewController,将详细视图控制器的类设置为MyDetailsViewController。但是,如果我将另一个UILabel拖到MyDetailsViewController的故事板中,并将其作为该类的属性进行连接。它没有显示出来。我只能在viewDidLoad()内以编程方式创建它。

- (void)viewDidLoad
{
    [super viewDidLoad];
    //self.testLabel was dragged into the storyboard and added as a property of the class
    [self.testLabel setText:@"TESTING!"]; 
    [self.view addSubview:self.testLabel];
    // creating programmatically
    UILabel *program = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 100, 100)];
    program.text = @"im a string";
    program.hidden = NO;
    [self.view addSubview:program];
    // The second one program shows up
}

为什么会出现这种情况?

2 个答案:

答案 0 :(得分:1)

  • 每当你做拖拽时在故事板中,它实际上创建了一个基于XML的文件,其中包含有关组件的每个细节。所以没有生成(目标-C)代码。您可以右键单击故事板&将其作为源代码打开以查看XML文件。即使在编译或运行程序之前,也可以查看故事板中的任何设计。

  • 编写代码时,只能通过编译和查看来查看视图/视图控制器。然后在模拟器中运行构建。

请点击右键单击故事板&将其作为源代码打开,您可以看到它在XML标记中的表示方式。

我希望有所帮助。

答案 1 :(得分:0)

您可以在MyDetailsViewController的.h文件中编写IBOutlet

@property (weak, nonatomic) IBOutlet UILabel *myLabel;

然后转到故事板并右键单击您的UILabel。您可以在那里看到新的引用插座。将其拖动到视图控制器。在那里你将获得myLabel选项。选择它。然后,您可以在编码中访问故事板中的UILabel。因此,您可以减少代码并在XIB中自定义UILabel属性,从而避免编码。

enter image description here