xcode - 如何将 IBOutlet 连接到 UIView?

标签 xcode uiview ios6 uistoryboard iboutlet

我正在尝试在动画后切换 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;

但是当我尝试连接 *mainUIView到 Storyboard上的 View ,它不会让我......
非常感谢你们。

最佳答案

您的困惑点在于在代码中创建 UI 对象与使用界面生成器/ Storyboard以图形方式创建它们之间。

一条线索是您使用预处理器提示“IBOutlet”。 IB 用于界面生成器 == 图形创建(使用 Storyboard或 xib 文件)。

如果在 Storyboard中创建...

  • 像您一样创建一个 IBOutlet 属性,尽管完全正确的语法是
    @property (nonatomic, weak) IBOutlet UIView *main;
  • 将“自定义 View ” View 从对象库拖到 Storyboard场景中。
  • CTRL 键从 View 拖动到 viewController。您应该会看到要连接的合适项目的列表。您的 IBOutlet 应该在列表中。选择它。

  • 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/

    相关文章:

    ios - 如何通过 ssh 运行 xcodebuild 命令?

    xcode - 对于关键错误,此类不符合键值编码?

    objective-c - 为什么在这个简单的代码中会出现 Apple Mach-O 错误?

    iOS 7 天气应用展开/折叠过渡

    iphone - 可达性探针 ios 6

    ios - 如何通过平移手势限制可移动 View

    ios - 在属性字符串上设置 NSForegroundColorAttributeName 会在 iOS 6 上向下移动文本

    iphone - 我可以制作具有这些规范的 iPhone 应用程序吗?

    iphone - UIViewController 或 UINavigationController 是否设置其 View 的大小?

    objective-c - 从角落调整 uiview 的大小