在这个项目中,为啥我无法访问从 nib 加载的视图属性?

Posted

技术标签:

【中文标题】在这个项目中,为啥我无法访问从 nib 加载的视图属性?【英文标题】:In this project, why am I unable to access my view's properties that I load from a nib?在这个项目中,为什么我无法访问从 nib 加载的视图属性? 【发布时间】:2013-11-08 17:58:07 【问题描述】:

这是一个重现问题的示例项目:http://cl.ly/3O3M232f1q0R

我创建了UIViewTutorialScreen 子类,并在一个xib 文件中创建了三个该类型的UIViews,并通过将这些对象带入UIViews 来在另一个类中使用它们:

self.tutorialScreen1 = [[[NSBundle mainBundle] loadNibNamed:@"View" owner:nil options:nil] objectAtIndex:0];
self.tutorialScreen1.translatesAutoresizingMaskIntoConstraints = NO;
self.tutorialScreen1.layer.cornerRadius = 8.0;
self.tutorialScreen1.alpha = 0.0;
[self.notificationWindow addSubview:self.tutorialScreen1];

在 xib 文件中,每个UIView 中间都有一个UILabel,我为它创建了一个出口(并将所有三个UIViews 链接到),称为textLabel

但是在我创建 tutorialScreen1 的那个类中,当我执行以下操作时:

NSLog(@"%@", self.tutorialScreen3.textLabel.text);

每次输出(null)。它到底为什么要这么做?标签明确设置为“文本”,所以我不明白为什么它一直称它为空。我根本无法操作它,因为标签似乎不存在。

【问题讨论】:

【参考方案1】:

您没有连接插座:


【讨论】:

在 .h 文件中向textLabel 添加了一个出口仍然没有做任何事情。 @Doug Smith 这不是你连接它的方式。请参阅第二个屏幕截图。 是否也可以通过约束来做到这一点?即使我以上述方式连接它们,我也试图在代码中访问它们,但失败了。 (假设我将文本标签顶部的自动布局约束连接到其父视图。) @Doug Smith 我不知道 :) @DougSmith,是的,您可以将 IBOutlets 设置为布局约束。您可以根据选择视图时看到的约束来制作它们,但有时从场景列表中选择它们会更容易。

以上是关于在这个项目中,为啥我无法访问从 nib 加载的视图属性?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从加载到的视图中访问/操作 nib 文件中的约束?

为啥 iOS 不自动旋转从 Nib 加载的视图在被 didReceiveMemoryWarning 释放后?

从 NIB 加载 UIView - 帧大小错误

XCode - 无法加载 NIB 文件包

Cocoa - 从 nib 加载视图并将其显示在 NSView 容器中,作为子视图

可插拔自定义视图 Nibs (Nib-in-a-Nib):内存泄漏 - 为啥?