щелкните любой UIImage и откройте UIImageView в target-c - PullRequest
1 голос
/ 31 января 2012

Я получил это решение на этом сайте: Щелкните UIImage и откройте UIImageView в Objective-c

Добавьте UITapGestureRecognizer к вашему UIImageView:

UITapGestureRecognizer *tapRecognizer;
tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(yourSelector)];
[thumbnail addGestureRecognizer:tapRecognizer];
[tapRecognizer release];

thumbnail.userInteractionEnabled = YES; // very important for UIImageView

Это работает очень хорошо для одного ImageView, но я добавляю более одного (примерно до 20) в свой scrollView, затем Как я могу определить, какой ImageView будет выбран или выбран пользователем.Я попытался установить свой собственный @selector (imageClicked), но он возвращает тег только для последнего imageView.

Я добавляю addGestureRecognizer в цикле, поскольку я динамически загружаю 20 статических изображений в imageView.

Ответы [ 5 ]

5 голосов
/ 31 января 2012

Это может помочь

for(int i=0;i<20;i++)
{
    UIImageView *img=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"yourimage.png"]];
    [img setTag:i];
    img.frame= //set frame accordingly;
    img.userInteractionEnabled = YES;
    UITapGestureRecognizer *tap =
    [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
    [img addGestureRecognizer:tap];
    [tap release];
    [scrollView addSubView:img];
}

- (void)handleTap:(UITapGestureRecognizer *)recognizer  {
    UIImageView *imageView = (UIImageView *)recognizer.view;

      switch([imageView tag])
    {
       case 1:
          //do your work
          break;
       .
       .
       .
       .
       case n:

    }
}
1 голос
/ 31 января 2012

Нельзя добавить один распознаватель касаний для нескольких просмотров.Создайте новый для каждого представления, к которому вы хотите добавить распознаватель касаний.Поскольку вы используете табличное представление, просто сделайте это в методе tableView:cellForRowAtIndexPath::

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // usual implementation
    static NSString *cellIdentifier = @"CellIdentifier";

    UITableViewCell *cell = [tableView dequeue ...];
    if (!cell) {
        cell = [[UITableViewCell alloc] init....];
        // add new gesture recognizer here.
    }

    // setup cell: set the image (just an example)
    cell.imageView.image = [images objectAtIndex:indexPath.row];

    return cell;
}

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

- (void)handleTap:(UITapGestureRecognizer *)recognizer  {
    UIImageView *imageView = (UIImageView *)recognizer.view;

    // assumes the image view is direct subview of the cell
    // change to match your cell structure
    UITableViewCell *cell = (UITableViewCell *) [imageView superview]; 

    // get the index path for the cell clicked
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];

    //  TODO: Use index path to get full image to display
}

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

1 голос
/ 31 января 2012
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
for (UIImageView *thumbnail in imageArray)  {
    [thumbnail addGestureRecognizer:tapRecognizer];
}
[tapRecognizer release];

Вы можете получить представление из свойства "view" UIGestureRecognizer.В вашем селекторе, например:

- (void)handleTap:(UITapGestureRecognizer *)recognizer  {
    UIImageView *imageView = (UIImageView *)recognizer.view;

    //  Now do something with your view
}
0 голосов
/ 31 января 2012

Пожалуйста, попробуйте создать подкласс ImageView и добавить распознаватель жестов в подкласс.

Теперь для каждого изображения создайте объект ImageView и добавьте изображение к этому объекту. Установите какое-то уникальное свойство, чтобы вы могли определить, какой объект щелкает, например, имя изображения.

0 голосов
/ 31 января 2012

Вам необходимо добавить тег ко всем изображениям - например, thumbnail.tag = 100. Затем измените ваш селектор на youSelector: (UITapGestureRecognizer *) sender;В селектор добавить переключатель

- (void) yourSelector:(UITapGestureRecognizer *)sender {
    UIImageView *imageView = (UIImageView *)sender.view;
    switch(imageView.tag) {
        case 100: {
        //This code will be handled if tag == 100;
        }
    }
}
...