Как получить доступ к переменной UITableViewController из UITableViewCell подкласса? - PullRequest
1 голос
/ 14 марта 2011

Как получить доступ к параметру UITableViewController из подкласса UITableViewCell?

У меня есть параметр в UITableViewController для размера шрифта (т.е. пользователи могут изменять размер шрифта). Таким образом, метод layoutSubviews в моем пользовательском подклассе UITableViewCell будет нуждаться в доступе к последнему шрифту, когда ему потребуется изменить макет самого себя (так как положение меток будет зависеть от шрифта).

Итак, мой вопрос, с моим пользовательским подклассом UITableViewCell и, в частности, в методе layoutSubviews, как мне получить доступ к параметру "uiFont", который является переменной экземпляра из UITableViewController?

Ответы [ 2 ]

4 голосов
/ 14 марта 2011

Есть несколько способов сделать это: получить доступ к UITableViewController через свойство делегата приложения (доступ к которому можно получить из любого места, используя [UIApplication sharedApplication].delegate), дать ячейке ссылку на UITableViewController при его создании в * 1002.* или следуйте цепочке UIResponder из представления ячеек, пока не найдете UITableViewController.

Но на самом деле это, вероятно, плохая архитектура.Вам, вероятно, следует просто вызвать reloadData в табличном представлении, чтобы оно воссоздало все ячейки, и установить шрифт в tableView:cellForRowAtIndexPath:.Или, если настройка шрифта должна сохраниться, вы можете сохранить ее в NSUserDefaults и заставить ячейки прослушивать NSUserDefaultsDidChangeNotification.

2 голосов
/ 14 марта 2011

Доступ к объекту UITableViewController из вашей ячейки не является хорошим подходом с точки зрения дизайна.Что вам нужно сделать, так это создать ивар в самой ячейке таблицы для хранения объекта UIFont:

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

А затем в вашем методе tableView:cellForRowAtIndexPath установите шрифт ячейки:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    [cell setFont:uiFont];
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...