0

我想发起这个活动:

- (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 时。我要做的就是在单击 UIImageView 时显示一个弹出框,它显示在 UIImageView 的右侧。我看到 UIImageView 没有 addAction 属性,因为它不是 UIControl 的子类。我做了一些研究,我可能不得不改用 UIButton。这是真的?有没有办法使用 UIImageView 来做到这一点,所以我不必再次重写代码?一世

4

4 回答 4

2

第一的。

你可以接触到任何具有超类的对象UIView

如果您在苹果文档中看到UIImageView 。

UIView : UIResponder : NSObject

UIResponder具有获取联系的功能。因此,在您的视图类中实现以下功能并检测您的UIImageView.

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

第二:

你也可以创建UITapGestureRecognizer for UIImageView

检查下面的博客教程。

使用 UIGestureRecognizers

编辑:

使用以下代码:

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

如果用户点击一次,点击的函数将被调用,所以你的标签函数实现应该如下所示

 -(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];
    }
于 2011-05-15T18:51:59.733 回答
0

不如使用UIButton并使用类方法将 UIImage 添加到其中。

- (void)setImage:(UIImage *)image forState:(UIControlState)state 
于 2011-05-15T18:49:15.253 回答
0

您可以定义自定义类型的 UIButton,不要给它任何文本或图像,给它一个清晰的背景,以及与您的图像视图相同的框架。然后将您的目标/选择器添加到按钮,当用户实际点击不可见按钮时,他们会看到他们正在点击图像视图。在 IB 中设置这大约需要 3 分钟,所以我认为您不需要再次重写代码。

于 2011-05-15T18:49:21.650 回答
0

您可以创建一个 Tap Gesture 识别器并将其附加到 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:

由于您在谈论弹出式控制器,我假设您已经有可用的手势识别器。

于 2011-05-15T18:53:53.957 回答