5

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

[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

4 回答 4

12

您的混淆点是在代码中创建 UI 对象与使用界面生成器/情节提要以图形方式创建它们之间。

一条线索是您使用了预处理器提示“IBOutlet”。IB 用于 Interface Builder == 图形创建(使用故事板或 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];

您需要考虑:您是否添加了故事板/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 中一样。

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

您不能做的一件事是在代码中创建视图,然后使用情节提要对其进行操作。

我希望这一切都是有用的,我担心我可能会进一步混淆你!

于 2013-01-29T07:55:59.027 回答
3

我迟到了。但无论如何,让我发布我最近发现的内容。

我有这种情况:

1) BaseViewController 包含 MenuView(自定义 UIView)

2) MenuView 包含 menuTable 包含所有菜单项

3) 在 StoryBoard 上,我有带有 MenuView 和 MenuTableView 的 BaseViewController 场景

我可以通过将故事板上的表格拖到 BaseViewController.h 来获得对 menuTable 的 IBOutlet 引用。但我希望自定义 MenuView 负责将 MenuTable 填充为分离问题。为此,我需要从 MenuView.h 到情节提要上的菜单表的 IBOutlet 参考连接。

所以这就是我所做的:

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

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

3) 现在打开 StoryBoard 并在 XCode 的 Assistant Editor 中打开 MenuView.h,我可以单击圆圈并将其拖到情节提要上的表格中。(注意:如果我尝试将表格从 StoryBoard 拖到 MenuView.h ,它不会让我这样做。请注意原因)

而已。现在我已经建立了从自定义 UiView 到 StoryBoard 的 IBOutlect 连接。

注意:我正在使用 XCode 7 并针对 iOS 7 及更高版本的设备。(如果这有什么不同)

于 2016-01-03T09:52:08.630 回答
1

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

在 iOS 5 第 1 部分中开始故事板

在 iOS 5 第 2 部分中开始故事板

于 2013-01-29T06:40:24.487 回答
1

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

语法应该是这样的:

@property (nonatomic, weak) IBOutlet UIView *main;
于 2013-01-29T06:45:57.610 回答