如何从子类化的 UITableViewCell 中访问 UITableViewController 变量?

发布于 2024-10-21 11:48:31 字数 415 浏览 1 评论 0原文

如何从子类化的 UITableViewCell 中访问 UITableViewController 参数?

我在 UITableViewController 中有一个用于字体大小的参数(即用户可以更改字体大小)。因此,我的自定义子类 UITableViewCell 中的 layoutSubviews 方法在需要重新布局自身时需要访问最新的字体(因为它的标签位置将取决于字体)。

所以我的问题是,从我的自定义子类 UITableViewCell 中,特别是在 layoutSubviews 方法中,如何访问“uiFont”参数,它是来自 的实例变量>UITableViewController

How do I access UITableViewController parameter from within a subclass'ed UITableViewCell?

I have a parameter in the UITableViewController for the font size (i.e. users can change font size). So the layoutSubviews method in my custom subclassed UITableViewCell will need to access the latest font when it needs to re-layout itself (as it label positions will depend on the font).

So my question, from with my custom subclassed UITableViewCell, and specifically within the layoutSubviews method, how do I access the "uiFont" parameter which is an instance variable from the UITableViewController?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(2

屋檐 2024-10-28 11:48:31

有几种方法可以做到这一点:通过应用程序委托上的属性访问 UITableViewController(您可以使用 [UIApplication sharedApplication].delegate 从任何地方访问它),为单元格提供对 UITableViewController 的引用当您在 tableView:cellForRowAtIndexPath: 中创建它时,或者从单元视图中遵循 UIResponder 链,直到找到 UITableViewController。

但实际上,这可能是一个糟糕的架构。您可能应该只在表视图上调用 reloadData 来让它重新创建所有单元格,并在 tableView:cellForRowAtIndexPath: 中设置字体。或者,如果字体设置应该保留,您可以将其存储在 NSUserDefaults 中,并让单元格监听 NSUserDefaultsDidChangeNotification

There are a few ways to do it: access the UITableViewController via a property on the application delegate (which you can access from anywhere using [UIApplication sharedApplication].delegate), give the cell a reference to the UITableViewController when you create it in tableView:cellForRowAtIndexPath:, or follow the UIResponder chain from the cell view until you find a UITableViewController.

But really, this is probably a poor architecture. You should probably just call reloadData on the table view to have it recreate all the cells, and set the font in tableView:cellForRowAtIndexPath:. Or if the font setting should persist, you could store it in NSUserDefaults and have the cells listen for NSUserDefaultsDidChangeNotification.

强辩 2024-10-28 11:48:31

从设计角度来看,从单元格内访问 UITableViewController 对象并不是一个好的方法。您应该做的是在表格单元格本身中创建一个 ivar 来存储 UIFont 对象:

@interface CustomCell : UITableViewCell {
    UIFont *font;
}
@property (nonatomic, retain) UIFont *font;

然后在您的 tableView:cellForRowAtIndexPath 方法中设置单元格的字体:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    [cell setFont:uiFont];
    ...
}

Accessing the UITableViewController object from within your cell isn't a good approach in terms of design. What you should be doing is creating an ivar in the table cell itself to store the UIFont object:

@interface CustomCell : UITableViewCell {
    UIFont *font;
}
@property (nonatomic, retain) UIFont *font;

And then in your tableView:cellForRowAtIndexPath method, set the font of the cell:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    [cell setFont:uiFont];
    ...
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文