将情节提要的 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的主要内容,如果未能解决你的问题,请参考以下文章
一起使用笔尖和情节提要:将笔尖的按钮目标/动作连接到情节提要中的控制器