UIPopOverControl和UIImageView

时间:2013-03-05 11:57:44

标签: ios objective-c uiimageview uipopovercontroller

我创建了一个UIButtonUIImageView,其中按钮框设置为与图像框大小相同。我愿意做的是,一旦我触摸它应该PopOver。按钮设置为动作。问题是它只显示图像一旦我触摸它没有弹出。

我的代码出了什么问题?

- (void)viewDidLoad {
    [super viewDidLoad];    
    UIImageView *imageView=[[UIImageView alloc] initWithFrame:CGRectMake(10, 10,100, 100)]; 
    imageView.image=[UIImage imageNamed:@"abc.jpg"];    
    [self.view addSubview:imageView];          
    imageView.userInteractionEnabled = YES;  
    UIButton *imageButton = [[UIButton alloc]init];
    [imageButton setFrame:CGRectMake(0, 0, 100, 100)];
    [imageButton addTarget:self action:@selector(imageTapped:) forControlEvents:UIControlEventTouchUpInside];
    [imageView addSubview:imageButton];
    [imageButton release];
    [imageView release];     
}


-(void)imageTapped:(UIButton*)in_sender {
    UIViewController *popoverContent = [[UIViewController alloc] init];
    CGRect theScreenFrame = [[UIScreen mainScreen] bounds];
    popoverContent.view.frame = CGRectMake(theScreenFrame.origin.x, theScreenFrame.origin.y,100, 100);
    popoverContent.view.backgroundColor = [UIColor whiteColor];
    popoverContent.contentSizeForViewInPopover = CGSizeMake(300, 300); 
    [popoverContent.view addSubview:imageButton];

    if(m_DetailPopover) {
        [m_DetailPopover release];
        m_DetailPopover = nil;
    }
    UIPopoverController m_DetailPopover = [[UIPopoverController alloc] initWithContentViewController:popoverContent];
    [popoverContent release];   

    [m_DetailPopover presentPopoverFromRect:imageButton.frame inView:self.view
     permittedArrowDirections:UIPopoverArrowDirectionAny  animated:YES];    
}

3 个答案:

答案 0 :(得分:1)

问题可能是代码中的拼写错误:

UIPopoverController *m_DetailPopover = [[UIPopoverController alloc] initWithContentViewController:popoverContent];

另请注意,您无法在imageTapped中引用imageButton,因为 你在viewDidLoad中发布它。

答案 1 :(得分:0)

您的UIImageView位于UIButton的前面,不允许获取按钮操作。为什么不用图像创建自定义按钮?

这样做:

UIButton *imageButton = [UIButton buttonWithType:UIButtonTypeCustom];
[imageButton setImage:[UIImage imageNamed:@"abc.jpg"]];
[imageButton setFrame:CGRectMake(0, 0, 100, 100)];
[imageButton addTarget:self action:@selector(imageTapped:) forControlEvents:UIControlEventTouchUpInside];
[imageView addSubview:imageButton];
[imageButton release];
[imageView release];

修改

UIPopoverController *m_DetailPopover = [[UIPopoverController alloc] initWithContentViewController:popoverContent];


[m_DetailPopover presentPopoverFromRect:imageButton.frame inView:self.view
 permittedArrowDirections:UIPopoverArrowDirectionAny  animated:YES];  
[popoverContent release];

答案 2 :(得分:0)

不要将图像视图作为子视图添加到按钮,反之亦然。只需将图像(不是图像视图)作为背景图像分配给按钮即可。