2011-12-30 60 views
4

我在UITableViewCell内有UIButton。当用户触摸单元格的按钮时,我想要显示指向该按钮的UIPopoverControllerUIPopOverController指向一个UITableViewCell内的对象?

目前,我在小区的委托下面的代码(委托是拥有UITableView的视图控制器):

-(void) onStatusButtonTouched:(UIButton *)aButton{ 
    StatusPickerController *statusPicker = [[StatusPickerController alloc] init]; 

    _popOver = nil; 
    _popOver = [[UIPopoverController alloc] initWithContentViewController:statusPicker]; 

    [_popOver setDelegate:self]; 

    [_popOver presentPopoverFromRect:aButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES]; 
    [_popOver setPopoverContentSize:CGSizeMake(100, 352)]; 
} 

有了这个代码,弹出了总是在的顶部指向查看,因为按钮的y位置与其单元相关。

我的问题是,我怎么能知道按钮的绝对位置,以指向它?有什么方法可以解决吗?

回答

8

取而代之的是以下行

[_popOver presentPopoverFromRect:aButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES]; 

的请尝试以下行

[_popOver presentPopoverFromRect:aButton.frame inView:[aButton superview] permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES]; 
+0

谢谢,这是正确的答案。 – 2011-12-30 11:47:17

+0

当答案完全正确的时候就喜欢它,谢谢! – Tim 2012-02-06 12:02:57

+0

@Tim,您随时欢迎您! – Ilanchezhian 2012-02-06 12:05:35

2

要通过Aadhira扩大了答案一点:按钮的框架是按钮的上海华盈的坐标系统相同。如果你想把它放在self.view中,你将不得不将它转换为self.view的坐标系。这可以通过UIView的方法convertRect:(CGRect) toView:(UIView *)来完成,像这样:

CGRect presentFromRect = [self.view convertRect:aButton.frame fromView:aButton.superview]; 
[_popOver presentPopoverFromRect:presentFromRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES]; 

因为这是一个很常见的情况使用popovers时,苹果公司提供了一个快捷方式。这是Aadhira给出的答案。

+0

感谢您对convertRect的提示:(CGRect)toView:(UIView *) – 2011-12-30 12:53:30

相关问题