Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Ошибка UITapGestureRecognizer при добавлении в изображение

Автор вопроса: tomeszmhОтветов: 4

Я использую UITapGestureRecognizer для обработки действий ImageviewTap. В основном ViewController он отлично работает. Но когда я использую другой ViewController в своем приложении и копирую тот же код UITapRecognizer, я получаю сообщение об ошибке EXC_BAD_ACCESS code = 1 address: 0x80759d3a в строку, когда я добавляю распознаватель в свое изображение. Что я не так?

Мой ImageView: работает

UIImageView *live;
live = [[UIImageView alloc]initWithFrame:CGRectMake(92, 230, 136, 100)];
live.image = [UIImage imageNamed:@"online.png"];
[live addSubview:onlineLabel2];
[live setUserInteractionEnabled:YES];
[self.view addSubview:live];
[super viewDidLoad];

и мой распознаватель жестов:

UITapGestureRecognizer *singleTaP3 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onlineTap:)];
singleTaP3.numberOfTapsRequired = 1;
singleTaP3.numberOfTouchesRequired = 1;
[live addGestureRecognizer:singleTaP3];

и последняя строка я получаю сбой.

  • Во-первых, вы должны вызвать [super viewDidLoad]; сначала и после этого добавьте код. danypata 12.05.2013

iosiphoneobjective-cevent-handlingaction

Ответы

Ответ 1 · Franck

Похоже, ваше живое представление не сохраняется, поэтому, когда вы пытаетесь добавить жест, представление больше не существует. Попробуйте записать свое живое представление как свойство интерфейса и синтезировать его в своей реализации.

Ответ 2 · Ankit Srivastava

Я не уверен, что это приводит к сбою вашего кода, но вы должны позвонить

[super viewDidLoad];

в начале кода. (Если вы используете ARC, это выглядит нормально.)

[super viewDidLoad];
UIImageView *live;
live = [[UIImageView alloc]initWithFrame:CGRectMake(92, 230, 136, 100)];
live.image = [UIImage imageNamed:@"online.png"];
[live addSubview:onlineLabel2];
[live setUserInteractionEnabled:YES];
[self.view addSubview:live];

Ответ 3 · Franck

Я тестирую следующее, и это работает. Интерфейс:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (strong, nonatomic) UIView *v;

- (void)tapAction;

@end

И реализация:

#import "ViewController.h"

@implementation ViewController

@synthesize v=_v;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    _v = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 50, 50)];
    [_v setBackgroundColor:[UIColor redColor]];

    [self.view addSubview:_v];

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction)];
    tap.numberOfTouchesRequired = 1;
    tap.numberOfTapsRequired = 1;

    [_v addGestureRecognizer:tap];
}

- (void)tapAction
{
    NSLog(@"tap tap");
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

Ответ 4 · tomeszmh

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы