开发iPad应用程序与iPhone有一点小差别,就是iPad支持弹出框。这个示例展示如何在UIPopoverController上显示一个UIPickerView,当然你可以显示任何的UIView到UIPopover上面。原理就是构建一个UIViewController,然后将这个UIViewController加在UIPopoverController上,最近显示UIPopoverController,即显示出我们的UIViewController的内容。
首先,要我们的controller支持UIPickerViewDelegate,UIPopoverControllerDelegate协议,
@interface myViewController : UIViewController<UIPickerViewDelegate,UIPopoverControllerDelegate>
- (void)showPickerInPopover:(CGRect)rect { UIViewController *sortViewController = [[UIViewController alloc] init]; UIView *theView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 216)]; UIPickerView *thePicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 320, 216)]; thePicker.delegate = self; thePicker.dataSource = self; thePicker.showsSelectionIndicator = YES; [theView addSubview:thePicker]; sortViewController.view = theView; [theView release]; popViewController = [[UIPopoverController alloc] initWithContentViewController:sortViewController]; [popViewController setPopoverContentSize:CGSizeMake(320, 216) animated:NO]; [popViewController presentPopoverFromRect:rect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; popViewController.delegate = self; ; [sortViewController release]; }
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { [popViewController release]; }
- (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component { // Handle the selection } // tell the picker how many rows are available for a given component - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { NSUInteger numRows = 5; return numRows; } // tell the picker how many components it will have - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 1; } // tell the picker the title for a given component - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { NSString *title; title = [@"" stringByAppendingFormat:@"%d",row]; return title; } // tell the picker the width of each row for a given component - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component { int sectionWidth = 300; return sectionWidth; }