Нажмите на UIImageView в ячейке таблицы, чтобы отобразить увеличенное изображение.

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

Может кто-нибудь предложить подход, пожалуйста.

Спасибо, Бхаскар


person Bhaskar    schedule 07.01.2010    source источник


Ответы (5)


Самый простой способ — добавить миниатюру на кнопку в качестве вспомогательного вида ячейки. Когда кнопка была нажата, она вызывала вспомогательный метод представления, который загружал следующее представление.

person TechZen    schedule 07.01.2010

из вашего вопроса понятно, что у вас есть пользовательская ячейка с uiimageview в ней. В этом случае, где бы вы ни коснулись этой ячейки, будь то изображение или пустая часть, вызывается метод didSelectRow atIndexPath. Лучший способ — использовать кнопку для отображения любого из них, подобно кнопке раскрытия информации в навигаторах.

person Nithin    schedule 07.01.2010

Я бы порекомендовал подход TechZen: вы можете добавить собственный UIButton и поместить его в любое место в ячейке, и эта свобода хороша, но, по моему опыту, это действительно снижает производительность прокрутки. Любая оптимизация дополнительных представлений может сделать их более удобными для пользователей, чем кнопки.

person Alex Reynolds    schedule 07.01.2010

Я согласен с Алексом. Дополнительная информация: это то, для чего в строках таблицы предназначен дополнительный вид кнопки подробного раскрытия информации. В качестве примера см. вкладку «Избранное» в приложении «Телефон». Нажатие на строку вызывает человека, но нажатие на эту синюю круглую кнопку справа приводит к подробному просмотру контактной информации человека. Другой пример — приложение YouTube.

Я думаю, вам нужно что-то вроде приложения YouTube, в котором нажатие на ячейку таблицы отображает увеличенное изображение, а нажатие на кнопку раскрытия сведений приводит к метаданным об изображении.

См. документы для UITableViewCell, чтобы узнать, как добавить кнопку раскрытия сведений. Это очень просто.

person Nimrod    schedule 07.01.2010

Поскольку мы знаем, что изображение находится в ячейке, а я ненавижу подклассы, мы можем сделать небольшой забавный лайфхак. Вы можете просто использовать свойство cell.imageView и добавить категорию в UIImageView:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

    if([self.superview isKindOfClass:[UITableViewCell class]]){

         if([touches anyObject].tapCount == 1){

          //Image was tapped, issue notification, we use the cell as the object
          [[NSNotificationCenter defaultCenter] postNotificationName:@"CellImageTapped" object:self.superview]
          //just return after the notification
          return;
         }
    }
    //if it wasn't a tap, just forward the touch
    [super touchesEnded:touches withEvent:event];
}

Затем в контроллере табличного представления вы можете разрешить выбранную ячейку:

NSIndexPath indexOfSelectedCellImage = [self.tableview indexPathForCell:[notificaton object]]; 

Я не проверял, но superview для cell.imageView может быть contentView, в этом случае просто замените следующее:

…if([self.superview.superview isKindOfClass:[UITableViewCell class]])…
…[[NSNotificationCenter defaultCenter] postNotificationName:@"CellImageTapped" object:self.superview.superview]…

Примечание. Убедитесь, что ваш контроллер табличного представления подписался на уведомление.

person Corey Floyd    schedule 07.01.2010