为什么在使用自定义“原型 tableviewcells”时无法定义 IBOutlet?
我有自己的表视图单元格,它是在我的故事板中定义的。我还为这个特殊单元定义了一个自定义 UITableViewCell 类。因此,当我想为自定义原型单元创建一个插座时,我收到一条错误,指出无法创建插座。
由于这是不可能的,我必须做一些丑陋的解决方法,并使用 IB 中的标签稍后在我的代码中引用各个标签和按钮。
我真的不明白为什么这是不可能的,我想知道使用标签和 [myCell viewWithTag:] 是否是最好的方法?
I have my own table view cell which is defined in my storyboard. I have also defined a custom UITableViewCell class for this special cell. So when I want to create an Outlet for my custom prototype cell I get an error that the Outlet cant be created.
Since this is not possible I have to do some ugly workarounds and use the tags in IB to reference the individual labels and buttons later on in my code.
I don't really see why this is not possible and I wonder if working with tags and [myCell viewWithTag:] is the best possible way to go here?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
因为插座是控制器和视图中特定项目之间的一对一连接。对于原型单元格来说,它只是对可以具有任意数量的不同项目(即表视图中的行)的单元格的描述。控制器如何知道您所指的是哪个项目(例如第 5 行或第 500 行)?这就是您收到错误消息的原因。
Lucas 提供了一种通过标签引用您的连接的方法,该方法效果非常好。
Because the outlet is a one-to-one connection between your controller and a specific item within the view. In the case of a prototype cell, it is simply a description of a cell that can have an arbitrary number of different items (i.e. rows in your table view). How would the controller know which item you are referring to (e.g. row 5 or 500)? That is why you are receiving the error message.
Lucas provided one method to refer to your connection via tags which works perfectly well.
我假设您正在使用动态原型 - 在故事板中表格视图的属性检查器中,有一个选项可以选择“静态单元格”或“动态原型”。如果您选择“静态单元格”,您就可以执行您想要执行的操作,因为在运行时,对于故事板中的每个单元格,表格视图中只有一个单元格。使用这种方法,您将只能使用您在故事板中创建的单元格,即您将无法选择代码中的单元格数量。
I assume you are using dynamic prototypes - in the attribute inspector of the tableview in the storyboard there is an option to select "static cells" or "dynamic prototypes". You can do what you are trying to do if you select "static cells" as there is only one cell in your tableview at run time for each cell in the storyboard. Using this approach you will only be able to use the cells you create in storyboard i.e. you will not be able to select the number of cells in your code.