Подкласс UIImageView не отвечает на событие касания? - PullRequest
0 голосов
/ 08 сентября 2011

У меня есть класс Player, который является подклассом UIImageView. Они порождаются другим классом и остаются на экране в течение 3 секунд, прежде чем исчезнуть. Если пользователь нажимает на изображение, оно должно исчезнуть немедленно. К сожалению, touchesBegan никогда не стреляет. У меня userInteractionEnabled установлено в YES.

-(id)initWithImage:(UIImage *)image
{
    self = [super initWithImage:image];

    if (self) {
        // Initialization code here.
        [self setUserInteractionEnabled:YES];

        // start timers to have it disappear after 3 sec
    }
    return self;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    // never called
    [self disappear:nil];
}

Все ответы, которые я могу найти, скажем, для установки userInteractionEnabled на YES, но я уже сделал это. Если это что-то значит, изображения создаются другим классом под названием Manager, который является собственным UIImageView в качестве фона приложения. Эти изображения меньше и периодически вспыхивают поверх этого фона. Фоновый UIImageView также имеет userInteractionEnabled, установленный в YES. Изображения мигают хорошо, они просто не реагируют на сенсорные события.

Класс Player сделан из класса Manager следующим образом:

Player* t = [[Player alloc] initWithImage:[imgArray objectAtIndex:imageIndex]];
[field addSubview:t];
[t becomeFirstResponder];

field - фоновое изображение (также UIImageView).

Ответы [ 2 ]

0 голосов
/ 16 сентября 2011

Проблема действительно заключалась в том, что для поля UIImageView необходимо, чтобы userInteractionEnabled было установлено в YES. Я понял это раньше, но настраивал в методе init. Когда я переместил его в awakeFromNib, все работало:)

0 голосов
/ 08 сентября 2011

РЕДАКТИРОВАТЬ: не-UIGestureRecognizer версия:

-(id)initWithImage:(UIImage*)image
{
    if (( self = [ super initWithImage:image ] ))
    {
        UIControl * control = [ [ [ UIControl alloc ] initWithFrame:self.bounds ] autorelease ] ; 
        [ button addTarget:self action:@selector( wasTapped ) forControlEvents:UIControlEventTouchUpInside ] ;

        [ self addSubview:control ];
    }
}

Вместо этого вы можете попробовать использовать UIGestureRecognizer ... т.е.

-(id)initWithImage:(UIImage*)image
{
    if (( self = [ super initWithImage:image ] ))
    {
        ...
        UIGestureRecognizer * recognizer = [ [ [ UITapGestureRecognizer alloc ] initWithTarget:self action:@selector( myTapHandler: ) ] autorelease ] ;
        [ self addGestureRecognizer:recognizer ] ;
        ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...