UIPickerView在UIPopoverController中正确显示方法

本文详细介绍了如何在iPad应用程序中使用UIPopoverController显示UIPickerView,包括创建UIViewController、配置UIPickerView、内存管理以及实现UIPickerViewDelegate和UIPopoverControllerDelegate的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发iPad应用程序与iPhone有一点小差别,就是iPad支持弹出框。这个示例展示如何在UIPopoverController上显示一个UIPickerView,当然你可以显示任何的UIView到UIPopover上面。原理就是构建一个UIViewController,然后将这个UIViewController加在UIPopoverController上,最近显示UIPopoverController,即显示出我们的UIViewController的内容。

首先,要我们的controller支持UIPickerViewDelegate,UIPopoverControllerDelegate协议,

@interface myViewController : UIViewController<UIPickerViewDelegate,UIPopoverControllerDelegate>

然后开始显示uipickerview

- (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];
}

注意内存管理,要释放UIPopoverController:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
	[popViewController release];
}

还有实现UIPickerDelegate

- (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;
}

UIPickerView里的内容自行修改。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值