Лучший способ обработки UITableViewCell - PullRequest
1 голос
/ 05 декабря 2008

У меня есть таблица, в которой примерно 10 ячеек, 4 разных типа. Я подкласс UITextViewCell, потому что я хотел иметь IBOutlet для метки и UITextField. Не уверен, что это лучший способ справиться с этим, но пока он работает. Затем у меня была ячейка для пола, поэтому я решил вместо подкласса UITableViewCell создать свою уже вложенную ячейку с помощью UILabel и UITextField и написал следующий код:

NSArray *buttonNames = [NSArray arrayWithObjects:@"Male", @"Female", nil];
UISegmentedControl* segmentedControl = [[UISegmentedControl alloc] initWithItems:buttonNames];
segmentedControl.momentary = YES;               
segmentedControl.autoresizingMask = UIViewAutoresizingFlexibleWidth;
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
segmentedControl.frame = CGRectMake(75, 5, 130, 30);
[segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
for (UIView *oneView in cell.contentView.subviews) {
    if ([oneView isMemberOfClass:[UITextField class]]) {
        [cell.contentView insertSubview:segmentedControl aboveSubview:oneView];
        [oneView removeFromSuperview];
    }
}
[segmentedControl release];

Насколько это ужасно? Должен ли я создавать подклассы UITableViewCell 5 раз для одного сложного tableView? Обрабатывает ли это в крайних случаях, таких как следующие ОК?

Ответы [ 3 ]

2 голосов
/ 17 января 2009

Я бы на самом деле пошел на подклассы. Подклассы это дешево. Ячейки имеют разные типы, и то, что вы делаете сейчас, - это перебирать все подпредставления и проверять каждое представление на принадлежность к классу - это медленно! Подкласс очистит ваш код и в то же время сделает его быстрее. Не пытайтесь складывать слишком много вещей в один контейнер.

0 голосов
/ 05 декабря 2008

Если это единственная таблица, где будут использоваться эти ячейки, я бы пошел вперед и настроил их на лету в tableView: cellForRowAtIndexPath: метод. Не беспокойтесь так много о подклассах.

И убедитесь, что вы пометили каждое подпредставление (например, ярлыки). Таким образом, вы можете ссылаться на метку, используя viewWithTag:

0 голосов
/ 05 декабря 2008

Вы всегда можете просто добавить элемент управления в свой подкласс, но скрыть его. Затем, в зависимости от строки, установите «режим» ячейки. Установщик режима может скрывать / показывать элементы управления, относящиеся к этой строке. Если производительность является проблемой, возможно, используйте несколько идентификаторов ячеек для кэширования представлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...