Сегментированный набор элементов управления iOS после создания

В пользовательском uitableviewcell сегментированный элемент управления создается при создании строки. Каждая строка - это вопрос в форме. В зависимости от типа вопроса у сегментированного элемента управления могут быть разные ответы. В ссылке на UISegmentedControl он только перечисляет метод init, который позволяет устанавливать все сегменты одновременно. Есть ли лучший способ, чем использовать удаление и вставку, чтобы обновить сегмент, чтобы иметь соответствующие сегменты?

В инициализации пользовательской ячейки UITableView она имеет

_answerSegmented = [[UISegmentedControl alloc] init];
[_answerSegmented addTarget:self action:@selector(answerChanged:) forControlEvents:UIControlEventValueChanged];
_answerSegmented.backgroundColor = [UIColor columnHeaderBackground];
[self addSubview:_answerSegmented];

Только позже он узнает, какими должны быть сегменты.

NSMutableArray *answers = [NSMutableArray arrayWithObjects:@"IN", @"OUT", nil];
if (_question.noItem.boolValue) {
    [answers addObject:@"N/O"];
}
if (_question.naItem.boolValue) {
    [answers addObject:@"N/A"];
}
_answerSegmented.segments = answers; // <---- this line gives a compile error

1 ответ

Решение

Нет, лучшего способа нет. Если все сегментированные элементы управления имеют одинаковое количество сегментов, создайте элемент управления с таким количеством сегментов. Тогда просто используйте setTitle:forSegmentAtIndex: изменить заголовок каждого сегмента, по одному за раз.

Если число может измениться, используйте removeAllSegments а также insertSegmentWithTitle:atIndex:animated:,

Или просто создайте новый сегментированный элемент управления и каждый раз удаляйте старый.

Другие вопросы по тегам