#iphone #three20
#iPhone #three20
Вопрос:
Я использую TTTableSubtitleItem для выделения ячеек таблицы. Затем я использую didSelectObject для отправки объекта в контроллер подробного просмотра. Чтобы предотвратить повторную отправку сообщения, я должен установить URL TTTableSubtitleItem равным нулю. Из-за этого кнопка раскрытия не будет отображаться?
[TTTableSubtitleItem itemWithText:[chunks objectAtIndex: 0]
subtitle:@"Link To Website"
imageURL:@""
defaultImage:[UIImage imageNamed:@"map.png"]
URL:nil
accessoryURL:@"http://www.google.com"];
Ответ №1:
У меня была такая же проблема, и я решил ее, создав подкласс ячейки элемента (так что для вас это было бы TTTableSubtitleItemCell
и переопределив setObject
метод для ручного включения кнопки раскрытия следующим образом:
- (void)setObject:(id)object {
if (_item != object) {
[_item release];
_item = [object retain];
[super setObject:object];
self.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
Я также использовал этот метод, чтобы позволить себе сохранить стиль выделения синим, даже если я не обрабатывал URL ожидаемым образом. Это произошло бы также путем простого добавления
self.selectionStyle = UITableViewCellSelectionStyleBlue;
сразу после другого вызова.
Обратите внимание, что вам также необходимо добавить сопоставление между интересующими вас элементами и этой новой ячейкой пользовательского элемента в вашем источнике данных. Для этого требуется переопределить один метод в пользовательском источнике данных. Если вы хотите, чтобы у всех ваших TTTableSubtitleItem
устройств была кнопка раскрытия, вы можете сопоставить TTTableSubtitleItem
свою новую ячейку пользовательского элемента. В противном случае просто создайте пользовательский подкласс TTTableSubtitleItem
, который также не вносит в него никаких изменений. Предполагая, что ваши два новых подкласса являются CustomItem
и CustomItemCell
ваш источник данных переопределил бы следующий метод, чтобы выглядеть следующим образом:
- (Class)tableView:(UITableView *)tableView cellClassForObject:(id)object {
if ([object isKindOfClass:[CustomItem class]]) {
return [CustomItemCell class];
} else {
return [super tableView:tableView cellClassForObject:object];
}
}
Надеюсь, это поможет
Комментарии:
1. Привет, Эндрю, спасибо за твою помощь с этим. При создании подкласса нужно ли мне создавать файл источника данных, чтобы применить ячейку к строкам таблицы? на данный момент я просто использую [DataSource.items AddObject:[TTTableSubtitleItem it….
2. Да, я отредактирую свой ответ, чтобы я мог использовать разметку кода, чтобы сделать его более понятным
3. Вау, отличный ответ, спасибо, что нашел время помочь мне с этим, Эндрю. Теперь она работает корректно, используя ваш ответ.
4. Привет, Эндрю, у меня более простая проблема, когда я пытаюсь заставить мой стиль выбора работать: bit.ly/jZCguM . Она подсвечивается, но почему-то синий фон не исчезает. Она просто застряла там.