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

时间:2011-03-14 01:13:01

标签: iphone ios uitableview layoutsubviews

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

在设计方面,从单元格中访问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];
    ...
}