由於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作爲參考視圖確定座標。