UIPopOverController指向UITableViewCell内的一个对象?

时间:2011-12-30 11:02:29

标签: objective-c ios ipad

UIButton内有UITableViewCell。当用户触摸单元格的按钮时,我想显示指向该按钮的UIPopoverController

目前我在单元格的委托中有以下代码(委托是拥有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位置相对于其单元格。

我的问题是,如何知道按钮的绝对位置才能指向它?有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:8)

而不是以下行

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

尝试以下行

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

答案 1 :(得分:2)

为了扩展Aadhira的答案:按钮的框架位于按钮的superview坐标系中。如果你想把它放在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时非常常见的情况,Apple提供了一个捷径。这是Aadhira给出的答案。