如何将IBOutlet连接到UIView?

Jon*_*van 4 xcode uiview iboutlet uistoryboard ios6

我正试图在看到动画后切换视图:

[UIView beginAnimations: @"Fade Out" context:nil];
[UIView setAnimationDelay:1.0];
[UIView setAnimationDuration:0.25];
splash.alpha = 0.0;
[UIView commitAnimations];
[self.view addSubview : view];
Run Code Online (Sandbox Code Playgroud)

[self.view addSubview : view];我必须为视图添加一个名称,以便添加,所以我IBOutlet这样做:(在第一个视图控制器的.h文件中)

IBOutlet UIView *main;
Run Code Online (Sandbox Code Playgroud)

但是当我尝试连接*main UIView到故事板上的视图时,它不会让我...非常感谢你们.

fou*_*dry 12

您的困惑之处在于在代码中创建UI对象与使用Interface Builder/storyboard以图形方式创建它们之间.

一个线索是您使用预处理器提示'IBOutlet'.IB用于Interface Builder ==图形创建(使用storyboard或xib文件).

如果在故事板中创建......

  • 尽管创建了完整正确的语法,但是正如您所做的那样创建一个IBOutlet属性
    @property (nonatomic, weak) IBOutlet UIView *main;

  • 将"自定义视图"视图从对象库拖到故事板场景.

  • CTRL-从视图拖动到viewController.您应该看到要连接的合适项目列表.您的IBOutlet应该在列表中.选择它.

IBOutlet的全部目的是为您提供对故事板场景中可以在代码中使用的项目的引用.

你不需要这样做:

  [self.view addSubview : view];
Run Code Online (Sandbox Code Playgroud)

因为它已经创建并添加到您的故事板中.确保它在您的视图层次结构中按预期定位.

如果在代码中创建......

在@interface中声明一个属性

  @property (nonatomic, strong) UIView *main;
Run Code Online (Sandbox Code Playgroud)

(不需要IBOutlet因为你没有在故事板中链接它.如果你没有立即将它分配给视图层次结构,则声明'强'而不是'弱'.

在添加此行之前

  [self.view addSubview : view];
Run Code Online (Sandbox Code Playgroud)

您需要考虑:您是否添加了storyboard/xib中不存在的新视图?如果是这样,则在创建之前无法添加它.(在故事板场景中添加IS在您的故事板中的视图没有意义,因为它已经存在).

所以 - 当您在代码中执行此操作时 - 您需要在添加视图之前创建视图.

  UIView* myView = [[UIView alloc] init];
Run Code Online (Sandbox Code Playgroud)

设置它的frame属性,以便我们知道将它添加到视图层次结构时它将出现在何处

  myView.frame = CGRectMake (CGFloat x, CGFloat y, CGFloat width, CGFloat height);
Run Code Online (Sandbox Code Playgroud)

将新创建的视图分配给属性

  self.main = myView;
Run Code Online (Sandbox Code Playgroud)

将其添加到视图层次结构中

  [self.view addSubview : myView];
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用self.main在代码中引用它.这就像你在IB/storyboard中添加它并将CRTL拖动到你的IBOutlet的参考链接一样.

如果要在代码中创建视图并立即将其添加到视图层次结构中,则声明属性的替代方法是在视图上设置(数字)标记属性,然后可以使用它的superview viewWithTag:方法引用视图

不能做的一件事是在代码中创建视图,然后使用故事板对其进行操作.

我希望这一切都很有用,我担心我可能会让你更加困惑!


CRD*_*ave 1

如果您是 Xcode 或 Storyboards 的新手,那么您应该看看这个基本教程:

iOS 5 中的故事板入门第 1 部分

iOS 5 中的故事板入门第 2 部分