three20 Как мне показать кнопку раскрытия информации при использовании didSelectObject в TTTableSubtitleItem

#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 . Она подсвечивается, но почему-то синий фон не исчезает. Она просто застряла там.