将情节提要的 UITableView 连接到 .m UIViewController 作为 IBOutlet

Posted

技术标签:

【中文标题】将情节提要的 UITableView 连接到 .m UIViewController 作为 IBOutlet【英文标题】:Connecting a storyboard's UITableView to a .m UIViewController as an IBOutlet 【发布时间】:2014-01-06 10:33:45 【问题描述】:

我将 UITableView 添加到 Xcode 中的情节提要文件和相应的 .m UIViewController(在属性检查器面板中设置为类类型)。我在 UIViewController 中有一个实例变量 myTableView,我想将它分配给情节提要的 UITableView,以便在代码中调用方法 reloadData。

但是,当我尝试使用 UIViewController 的 NSLog 在 init 或 viewDidLoad 方法中打印出变量信息时,该变量为空。

来自 UIViewController 的示例代码: @property (nonatomic, strong) IBOutlet UITableView *myTableView;

我正在初始化对应的UIViewController如下:

self = [super initWithNibName:@"CorrespondingNibViewControllerName" bundle:nil];

我曾希望 myTableView 实例变量已经通过情节提要初始化为 UITableView 但这似乎没有发生......

【问题讨论】:

在你的 .h 文件中为 tableview 添加一个 IBOutlet 并将它连接到你的 xib 文件中。 【参考方案1】:

您认为在 numberOfRows 中分配 tableview 不是应该的方式是正确的。

您应该通过 Interface Builder 简单地通过 IBOutlet 分配它,它会自动为您分配,无需任何额外代码。

【讨论】:

我以为我以前试过这个,我需要右键单击文件所有者(在占位符下)菜单并将其拖到画布上的 UITableView 控制器上并松开。这将实例变量连接到实际拖放的 UITableView 元素。它还会填充 .h 中变量声明左侧的空圆圈,使其看起来像一个选中的单选按钮。【参考方案2】:

我将创建两个新文件 myTableView.h 和 myTableView.m UITableView 的子类。然后在 .xib 文件中,单击新添加的 UITableView 对象并在 Identity Inspector 面板上将自定义类分配给 myTableView。

在您自己的 UIViewController 的 subclass.m 中,您可以在 prepareForSeque: sender: 方法中实例化 myTableView 对象。您还可以在 UIViewController subclass.m 下的 viewDidLoad 中添加要打印的代码。

不要忘记在属性检查器中为您的 Segue Identifier 分配一个名称。

【讨论】:

哦,忘了说;在调用 viewDidLoad 之前,IBOutlets 不会被激活/分配。因此,如果您从那里访问它,那么 -init 中的 ivar myTableView 确实将为零。您应该在 -viewDidLoad 中首次访问

以上是关于将情节提要的 UITableView 连接到 .m UIViewController 作为 IBOutlet的主要内容,如果未能解决你的问题,请参考以下文章

一起使用笔尖和情节提要:将笔尖的按钮目标/动作连接到情节提要中的控制器

使用多个 ViewController、Xcode 将代码连接到情节提要中的 UI

如何将情节提要中的多个按钮连接到单个动作?

如何将情节提要中的按钮连接到 Xcode 中的代码

在 Xcode 7 中将出口从文件连接到情节提要

使用故事板将原型单元连接到不同的场景