如何将IBOutlet连接到UIView?

时间:2013-01-29 05:54:25

标签: 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];我必须为视图添加一个名称才能添加,所以我这样做IBOutlet :(在第一个视图控制器的.h文件中)

IBOutlet UIView *main;

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

4 个答案:

答案 0 :(得分: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];

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

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

在@interface

中声明一个属性
  @property (nonatomic, strong) UIView *main;

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

在添加此行之前

  [self.view addSubview : view];

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

所以 - 你似乎在代码中这样做 - 你需要在添加之前创建视图。

  UIView* myView = [[UIView alloc] init];

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

  myView.frame = CGRectMake (CGFloat x, CGFloat y, CGFloat width, CGFloat height);

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

  self.main = myView;

将其添加到视图层次结构

  [self.view addSubview : myView];

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

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

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

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

答案 1 :(得分:3)

我迟到了。但是,让我发布我最近发现的内容。

我遇到这种情况:

1)包含MenuView(Custom UIView)的BaseViewController

2)MenuView包含menuTable,其中包含所有菜单项

3)在StoryBoard上,我有使用MenuView和MenuTableView

的BaseViewController场景

我可以通过将故事板上的表拖到BaseViewController.h来实现对menuTable的IBOutlet引用。 但我希望自定义MenuView负责将MenuTable填充为分离问题。为了做到这一点,我需要从MenuView.h到故事板上的菜单表的IBOutlet引用连接。

所以这就是我所做的:

1)首先在MenuView.h中创建表的IBOutlet属性    @property(弱,非原子)IBOutlet UITableView * menuTable;

2)创建属性后,属性声明的左侧会有一个小圆圈,表示这是IBOutlet变量。

3)现在打开StoryBoard并在XCode的Assistant Editor中打开MenuView.h,我可以点击圆圈并将其拖到故事板上的表格中。 (注意:如果我尝试将桌面从StoryBoard拖到MenuView.h,它就不允许我这样做。请注意确定原因)

那就是它。现在我已经从自定义UiView到StoryBoard建立了IBOutlect连接。

注意:我正在使用XCode 7并定位iOS 7及更高版本的设备。 (如果这有任何区别)

答案 2 :(得分:1)

如果您不熟悉Xcode或Storyboard,请查看此基本教程:

Beginning Storyboards in iOS 5 Part 1

Beginning Storyboards in iOS 5 Part 2

答案 3 :(得分:1)

您是否将该视图声明为属性?

语法应该是这样的:

@property (nonatomic, weak) IBOutlet UIView *main;