Xcode 如何将IBOutlet连接到UIView?
我正在尝试在动画后切换视图,如图所示:Xcode 如何将IBOutlet连接到UIView?,xcode,uiview,ios6,uistoryboard,iboutlet,Xcode,Uiview,Ios6,Uistoryboard,Iboutlet,我正在尝试在动画后切换视图,如图所示: [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]中我必须
[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]中
我必须为要添加的视图添加一个名称,因此我制作了一个类似这样的IBOutlet
:(在第一个视图控制器的.h文件上)
但是当我尝试将*main
UIView
连接到故事板上的视图时,它不允许我。。。
非常感谢各位。如果您是Xcode或故事板新手,那么您应该看看本基础教程:
是否将视图声明为属性 语法应该是这样的:
@property (nonatomic, weak) IBOutlet UIView *main;
在代码中创建UI对象与使用Interface Builder/storyboard以图形方式创建UI对象之间存在混淆 一个线索是使用预处理器提示“IBOutlet”。IB用于Interface Builder==图形创建(使用故事板或xib文件) 如果在情节提要中创建
- 尽管完全正确的语法是
@property(非原子,弱)ibuiview*main代码>
- 将“自定义视图”视图从对象库拖动到情节提要场景
- CTRL键从视图拖动到viewController。您应该会看到一个合适的项目列表,可以连接到这些项目。您的IBOutlet应该在列表中。选择它
[self.view addSubview : view];
因为它已经创建并添加到您的故事板中。确保它位于视图层次结构中预期的位置
如果在代码中创建
在@interface中声明属性
@property (nonatomic, strong) UIView *main;
(不需要IBOutlet
,因为您没有在故事板中链接它。如果您没有立即将其指定给视图层次结构,则声明为“强”而不是“弱”)
在添加此行之前
[self.view addSubview : view];
您需要考虑:您是否添加了故事板/xib中不存在的新视图?如果是,则在创建之前无法添加它。(添加故事板中的视图没有意义,因为它已经存在于故事板场景中)
因此,当您在代码中执行此操作时,您需要在添加视图之前创建视图
UIView* myView = [[UIView alloc] init];
设置它的frame属性,以便我们知道在将其添加到视图层次结构时它将显示在何处
myView.frame = CGRectMake (CGFloat x, CGFloat y, CGFloat width, CGFloat height);
[self.view addSubview : myView];
将新创建的视图指定给属性
self.main = myView;
将其添加到视图层次结构中
myView.frame = CGRectMake (CGFloat x, CGFloat y, CGFloat width, CGFloat height);
[self.view addSubview : myView];
现在,您可以使用self.main在代码中引用它。这就像您将其添加到IB/storyboard中,并且CRTL将参考链接拖到您的IBOutlet中一样
如果要在代码中创建视图并立即将其添加到视图层次结构中,则声明属性的另一种方法是在视图上设置(数字)标记属性,然后可以使用其superview的viewWithTag:
方法引用视图
您不能做的一件事是在代码中创建视图,然后使用情节提要对其进行操作
我希望这些都是有用的,我担心我可能会让你更加困惑 我迟到了。但不管怎样,还是让我把我最近发现的东西贴出来吧 我有这样的情况: 1) 包含菜单视图(自定义UIView)的BaseViewController 2) MenuView包含保存所有菜单项的menuTable 3) 在故事板上,我有带MenuView和MenuTableView的BaseViewController场景 我可以让IBOutlet引用menuTable,这是我们通常通过将故事板上的表拖到BaseViewController.h来实现的。 但是我希望自定义MenuView负责填充MenuTable作为分离关注点。为了做到这一点,我需要从MenuView.h到故事板上的菜单表的IBOutlet引用连接 这就是我所做的: 1) 首先在MenuView.h中创建表的IBOutlet属性 @属性(弱,非原子)IBUITableView*可菜单 2) 创建属性后,在属性声明的左侧有一个小圆圈,表示这是IBOutlet变量 3) 现在,在XCode的助手编辑器中打开了StoryBoard和MenuView.h,我可以单击圆形并将其拖动到StoryBoard上的表中。 (注意:如果我尝试将表从StoryBoard拖到MenuView.h,它不允许我这样做。注意确定原因) 就这样。现在,我已经建立了从自定义UiView到情节提要的iButSelect连接
注意:我使用的是XCode 7,目标是iOS 7及以上的设备。(如果这有什么区别的话)IBOutlets应该始终是弱属性。当它们从故事板或xib实例化时,它们由superview预先拥有。IBOutlet的唯一用途是作为从代码中引用(已经存在的)接口生成器对象的机制。声明IBOutlet STRONG将导致内存泄漏。