Нажмите на UIImageView в ячейке таблицы, чтобы увеличить изображение - PullRequest
1 голос
/ 07 января 2010

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

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

Спасибо, Bhaskar

Ответы [ 5 ]

1 голос
/ 07 января 2010

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

1 голос
/ 07 января 2010

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

0 голосов
/ 07 января 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]]; 

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

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

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

0 голосов
/ 07 января 2010

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

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

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

0 голосов
/ 07 января 2010

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

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