Я использую 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];
и последняя строка я получаю сбой.
Ответ 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