2010-03-11 2 views
5

Я просто заявляю о развитии iPhone и не могу найти ответ. Я ищу то, что хочу.касается обработчика событий для UIImageView

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

в C# я бы иметь что-то, что выглядит как

Button б = новый Button(); b.Click + = мой код обработчика

прямо сейчас у меня есть это

CGRect myImageRect = CGRectMake(0.0f, 0.0f, 141.0f, 151.0f); 
UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect]; 

myImage.userInteractionEnabled = YES; 
[myImage setImage:[UIImage imageNamed:@"myImage.png"]]; 
myImage.opaque = YES; // explicitly opaque for performance 
[self.view addSubview:myImage]; 
[myImage release]; 

Что мне нужно сделать, чтобы переопределить события прикосновения?

благодаря

ответ

9

Хотя это не полный ответ на ваш вопрос, я думаю следующее решение может быть лучше, чем делать «Невидимый кнопочный обходной путь» .. просто подкласс от UIImageView и переопределить следующий метод:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

//your UIImageView has been touched :) 

//event -> "A UIEvent object representing the event to which the touches belong." 

//touches -> "A set of UITouch instances in the event represented by event that represent the touches in the UITouchPhaseEnded phase." 

} 

надеюсь, что это поможет ...

+0

Действительно, это не тот ответ, который я искал.Но кажется, что единственный способ, который я могу найти, - использовать наследование. Я думаю, C# испортил мне до такой степени, что я думаю, что такие методы должны быть доступны без такой большой работы. Однако, спасибо. – madmik3

0

Я не нашел способ сделать это непосредственно с UIImageView. Но если вы подклассифицируете его и переопределите метод nextResponder, чтобы вернуть делегат под свой контроль, вы можете делать то, что вам нужно. Выделите делегата как свойство подкласса, а затем вы можете передать делегат для событий касания и изменить его в любое время.

0

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

3

Просто используйте пользовательский UIButton с изображением в качестве фонового изображения.

5

У меня есть основной вид с некоторыми значками вроде «about», чтобы открыть представление. В соответствующем контроллере (mainview) я добавил обработчик событий для touchBegan. Кроме того, мне нужно проверить, какой вид был «тронут», так как на экране больше значков. Мой экземпляр UIImageView «aboutImg», и необходимо проверить взаимодействие пользователя (т. Е. Конструктор пользовательского интерфейса -> инспектор атрибутов представления).

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    if ([touch view] == aboutImg){ 
     [self ShowAbout]; 
    } 
} 

Убедитесь, что вы указали «Включено взаимодействие с пользователем». Это самое простое решение

+0

Это самое простое решение. Я проверяю флажок «Взаимодействие с пользователем» и перебрасывал его в подклассу UITableViewCell, чтобы захватить несколько сот в ячейке. Работал идеально и легко. Не нужно подклассифицировать UIImageView –

0

Вам не нужно ничего делать с UIImageView, Вы можете использовать UIButton с типом обычая и добавить подправить в действии на него ... набор button.imageview setImage: т.е.

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
btn.frame = CGRectMake(0,0,100,100); //edit for you own frame 
UIImage *img = [UIImage imageNamed:@"myimage.png"]; 
[button setImage:img forState:UIControlStateNormal]; 

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

0

Самый простой способ добавить событие onClick в UIImageView или в UIView - добавить к нему распознаватель жестов.

UIImage *myImage = [UIImage imageNamed:@"myImage.png"]; 
UIImageView *myImageView = [[UIImageView alloc] initWithImage: myImage]; 

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action: @selector(onImageViewClicked)]; 
singleTap.numberOfTapsRequired = 1; 
singleTap.numberOfTouchesRequired = 1; 
[self.myImageView addGestureRecognizer:singleTap]; 
[self.myImageView setUserInteractionEnabled:YES];