繁体   English   中英

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

[英]How to access UITableViewController variable from within a subclass'ed UITableViewCell?

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

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

所以我的问题是,从我的自定义子类UITableViewCell出发,尤其是在layoutSubviews方法内,如何访问UITableViewController的实例变量“ uiFont”参数?

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

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

就设计而言,从单元内访问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];
    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM