我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位置相对于其单元格。
我的问题是,如何知道按钮的绝对位置才能指向它?有没有办法解决这个问题?
答案 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给出的答案。