Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 如何将IBOutlet连接到UIView?_Xcode_Uiview_Ios6_Uistoryboard_Iboutlet - Fatal编程技术网

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应该在列表中。选择它
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将导致内存泄漏。