我正在尝试在动画后切换 View ,如下所示:
[UIView beginAnimations: @"Fade Out" context:nil];
[UIView setAnimationDelay:1.0];
[UIView setAnimationDuration:0.25];
splash.alpha = 0.0;
[UIView commitAnimations];
[self.view addSubview : view];
在
[self.view addSubview : view];
我必须为 View 添加一个名称才能添加,所以我做了一个 IBOutlet
像这样:(在第一个 View Controller 的 .h 文件上)IBOutlet UIView *main;
但是当我尝试连接
*main
时UIView
到 Storyboard上的 View ,它不会让我......非常感谢你们。
最佳答案
您的困惑点在于在代码中创建 UI 对象与使用界面生成器/ Storyboard以图形方式创建它们之间。
一条线索是您使用预处理器提示“IBOutlet”。 IB 用于界面生成器 == 图形创建(使用 Storyboard或 xib 文件)。
如果在 Storyboard中创建...
@property (nonatomic, weak) IBOutlet UIView *main;
IBOutlet 的全部目的是为您提供对 Storyboard场景中可以在代码中使用的项目的引用。
你不需要这样做:
[self.view addSubview : view];
因为它已经创建并添加到您的 Storyboard中。确保它在您的 View 层次结构中按您的预期定位。
如果在代码中创建...
在@interface 中声明一个属性
@property (nonatomic, strong) UIView *main;
(不需要
IBOutlet
,因为您没有在 Storyboard中链接它。如果您没有立即将其分配给 View 层次结构,则声明为“强”而不是“弱”)。在添加此行之前
[self.view addSubview : view];
您需要考虑:您是否添加了一个在您的 Storyboard/xib 中不存在的新 View ?如果是这样,则在创建它之前无法添加它。 (在 Storyboard中添加 IS View 没有意义,因为它已经存在于 Storyboard场景中)。
因此 - 正如您在代码中所做的那样 - 您需要在添加 View 之前创建 View 。
UIView* myView = [[UIView alloc] init];
设置它的 frame 属性,以便我们知道当你将它添加到 View 层次结构时它会出现在哪里
myView.frame = CGRectMake (CGFloat x, CGFloat y, CGFloat width, CGFloat height);
将新创建的 View 分配给属性
self.main = myView;
将其添加到您的 View 层次结构中
[self.view addSubview : myView];
现在您可以使用 self.main 在代码中引用它。这就像您将其添加到 IB/ Storyboard并通过 CRTL 将引用链接拖到您的 IBOutlet 中一样。
如果您在代码中创建 View 并立即将其添加到 View 层次结构中,则声明属性的替代方法是在 View 上设置(数字)标记属性,然后您可以使用它的 super View 的
viewWithTag:
来引用该 View 。方法您不能做的一件事是在代码中创建 View ,然后使用 Storyboard 对其进行操作。
我希望这都是有用的,我担心我可能会进一步混淆你!
关于xcode - 如何将 IBOutlet 连接到 UIView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14576515/