如何从子类化的 UITableViewCell 中访问 UITableViewController 变量?
如何从子类化的 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
有几种方法可以做到这一点:通过应用程序委托上的属性访问 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 intableView: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 intableView:cellForRowAtIndexPath:
. Or if the font setting should persist, you could store it in NSUserDefaults and have the cells listen forNSUserDefaultsDidChangeNotification
.从设计角度来看,从单元格内访问
UITableViewController
对象并不是一个好的方法。您应该做的是在表格单元格本身中创建一个 ivar 来存储 UIFont 对象:然后在您的 tableView:cellForRowAtIndexPath 方法中设置单元格的字体:
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 theUIFont
object:And then in your
tableView:cellForRowAtIndexPath
method, set the font of the cell: