为什么在使用自定义“原型 tableviewcells”时无法定义 IBOutlet?

发布于 2024-12-20 18:52:30 字数 234 浏览 3 评论 0原文

我有自己的表视图单元格,它是在我的故事板中定义的。我还为这个特殊单元定义了一个自定义 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

ヅ她的身影、若隐若现 2024-12-27 18:52:30

因为插座是控制器和视图中特定项目之间的一对一连接。对于原型单元格来说,它只是对可以具有任意数量的不同项目(即表视图中的行)的单元格的描述。控制器如何知道您所指的是哪个项目(例如第 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.

月亮坠入山谷 2024-12-27 18:52:30
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentInIB"];

UIImageView *img = (UIImageView*) [cell.contentView viewWithTag:1];
//img.image = ...

//Access you prototype cell here to alter its style, example:
[[cell layer] setCornerRadius:10];
[cell setClipsToBounds:YES];

return cell;}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentInIB"];

UIImageView *img = (UIImageView*) [cell.contentView viewWithTag:1];
//img.image = ...

//Access you prototype cell here to alter its style, example:
[[cell layer] setCornerRadius:10];
[cell setClipsToBounds:YES];

return cell;}
臻嫒无言 2024-12-27 18:52:30

我假设您正在使用动态原型 - 在故事板中表格视图的属性检查器中,有一个选项可以选择“静态单元格”或“动态原型”。如果您选择“静态单元格”,您就可以执行您想要执行的操作,因为在运行时,对于故事板中的每个单元格,表格视图中只有一个单元格。使用这种方法,您将只能使用您在故事板中创建的单元格,即您将无法选择代码中的单元格数量。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文