由于ipad屏幕较大,不像iphone那样经常整页以导航形式滑动,而是将很多信息以popover的形式弹出供显示或编辑。popover原意为淡烤的酥饼,苹果产品中用于指代这种弹出窗口。
如下图所示,单击某一行烟草信息即弹出popover窗口供填写订购数量
代码如下:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
OrderNumViewController *orderNumViewController = [[OrderNumViewController alloc] init];
orderNumViewController.containerViewController = self;
if (orderNumPopover == nil) {
orderNumPopover = [[UIPopoverController alloc] initWithContentViewController:orderNumViewController];
}else {
orderNumPopover.contentViewController = orderNumViewController;
}
OrderOnlineCell *cell = (OrderOnlineCell *)[tableView cellForRowAtIndexPath:indexPath];
[self showOrderNumPopover:cell];
[orderNumViewController release];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
OrderNumViewController *orderNumViewController = [[OrderNumViewController alloc] init];
orderNumViewController.containerViewController = self;
if (orderNumPopover == nil) {
orderNumPopover = [[UIPopoverController alloc] initWithContentViewController:orderNumViewController];
}else {
orderNumPopover.contentViewController = orderNumViewController;
}
OrderOnlineCell *cell = (OrderOnlineCell *)[tableView cellForRowAtIndexPath:indexPath];
[self showOrderNumPopover:cell];
[orderNumViewController release];
}
-(void)showOrderNumPopover:(OrderOnlineCell *)cell {
//弹出窗口大小,如果屏幕画不下,会挤小的。这个值默认是320x1100
orderNumPopover.popoverContentSize = CGSizeMake(400, 320);
//popoverRect的中心点是用来画箭头的,如果中心点如果出了屏幕,系统会优化到窗口边缘
CGRect popoverRect = CGRectMake(cell.bounds.origin.x + cell.bounds.size.width - 100,
cell.bounds.origin.y,
27, 32);
[orderNumPopover presentPopoverFromRect:popoverRect
inView:cell //上面的矩形坐标是以这个view为参考的
permittedArrowDirections:UIPopoverArrowDirectionUp //箭头方向
animated:YES];
}
//弹出窗口大小,如果屏幕画不下,会挤小的。这个值默认是320x1100
orderNumPopover.popoverContentSize = CGSizeMake(400, 320);
//popoverRect的中心点是用来画箭头的,如果中心点如果出了屏幕,系统会优化到窗口边缘
CGRect popoverRect = CGRectMake(cell.bounds.origin.x + cell.bounds.size.width - 100,
cell.bounds.origin.y,
27, 32);
[orderNumPopover presentPopoverFromRect:popoverRect
inView:cell //上面的矩形坐标是以这个view为参考的
permittedArrowDirections:UIPopoverArrowDirectionUp //箭头方向
animated:YES];
}
其中需要注意的是如何确定popover弹出的位置和箭头所指方向。
showOrderNumPopover函数中首先确定弹出窗口大小,然后绘制箭头方框,其坐标以传入的单元格视图为参考。
在实现过程中,因为没搞清楚,以整个tableView作为参考确定坐标,导致popover弹出窗口的位置总是不变,一度怀疑cell从table中取出后就失去了关联属性,后来仔细研究下原来要以点击的cell作为参考视图确定坐标。
转载于:https://blog.51cto.com/afantihust/533940