2011-05-15 7 views
0

Я хотел бы запустить это событие:UIImageView показывая UIPopOver

- (IBAction)profilePop:(id)sender 
{ 
    ProfileViewController * profile = [[ProfileViewController alloc] init]; 
    UIImageView * temp = ((UIImageView *)sender); 
    profile.uid = [[[posts objectAtIndex:((UIImageView *)sender).tag] creator] mid]; 
    NSLog(@"profile id %@", profile.uid); 
    UIPopoverController * profilePop = [[UIPopoverController alloc] initWithContentViewController:profile]; 
    [profilePop presentPopoverFromRect:CGRectMake(temp.frame.origin.x+temp.frame.size.width, temp.frame.origin.y + temp.frame.size.height/2, profile.view.frame.size.width, profile.view.frame.size.height) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES]; 
} 

, когда пользователь нажимает на UIImageView. Все, что я пытаюсь сделать, это показать popover при щелчке UIImageView и показано справа от UIImageView. Я вижу, что UIImageView не имеет от него атрибута addAction, поскольку он не является подклассом UIControl. Я сделал некоторые исследования, которые, вероятно, мне, вероятно, придется использовать UIButton. Это правда? Есть ли способ сделать это с помощью UIImageView, поэтому мне не нужно снова переписывать код? I

ответ

2

Первый.

Вы можете получить доступ к любому объекту, который имеет суперкласс как UIView.

если вы видите UIImageView в документации на яблоко.

UIView : UIResponder : NSObject 

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

– touchesBegan:withEvent: 
– touchesMoved:withEvent: 
– touchesEnded:withEvent: 
– touchesCancelled:withEvent: 

Второй:

можно также создать UITapGestureRecognizer для UIImageView.

Посмотрите нижеприведенный учебник по блогам.

Working with UIGestureRecognizers

Редакцией:

Использование ниже код:

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc]    initWithTarget:self action:@selector(tapped:)]; 
[tapRecognizer setNumberOfTapsRequired:1]; 
[tapRecognizer setDelegate:self]; 
[MyImageView addGestureRecognizer:tapRecognizer]; 

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

-(void)tapped:(id)sender 
    { 

     NSLog(@"See a tap gesture"); 

     ProfileViewController * profile = [[ProfileViewController alloc] init]; 
     UIImageView * temp = [(UIPanGestureRecognizer*)sender view]; 
     profile.uid = [[[posts objectAtIndex:((UIImageView *)sender).tag] creator] mid]; 
     NSLog(@"profile id %@", profile.uid); 
     UIPopoverController * profilePop = [[UIPopoverController alloc] initWithContentViewController:profile]; 
     [profilePop presentPopoverFromRect:CGRectMake(temp.frame.origin.x+temp.frame.size.width, temp.frame.origin.y + temp.frame.size.height/2, profile.view.frame.size.width, profile.view.frame.size.height) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES]; 
    } 
+0

Можете ли вы быть более конкретным в том, как я могу применить это? – aherlambang

+0

@aherlambang: проверьте обновленный ответ. – Jhaliya

+0

приведет ли это к замедлению, если я добавлю UIGestureRecognizer для каждой ячейки? – aherlambang

0

Вместо этого и используя метод класса, чтобы добавить к нему UIImage.

- (void)setImage:(UIImage *)image forState:(UIControlState)state 
0

Вы можете определить UIButton типа обычая, не дать ему какой-либо текст или изображение, дать ему ясный фон, и один и тот же кадр, как ваш взгляд изображения. Затем добавьте свою цель/селектор к кнопке, и он появится пользователю, которого они нажимают на изображение, когда они на самом деле нажимают невидимую кнопку. Это займет около 3 минут, чтобы настроить в IB, поэтому я не думаю, что вам нужно будет снова переписать код.

0

Вы можете создать распознаватель жестикуляции и прикрепить его к UIImageView.

// By now imageView exists! 
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)]; 
tapGesture.numberOfTapsRequired = 1; 
tapGesture.numberOfTouchesRequired = 1; 
[imageView addGestureRecognizer:tapGesture]; 
[tapGesture release]; 

Теперь handleTapGesture будет очень похож на ваш -profilePop:

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

+0

означает ли это, что я должен добавить это к каждому UIImageView в каждой ячейке? – aherlambang

+0

или следует добавить это в мой подкласс UITableViewCell – aherlambang

+0

каждой ячейки? это часть табличного представления? –