如何在 PickerView 顶部添加一个按钮以及如何在单击该按钮时关闭 PickerView?

Posted

技术标签:

【中文标题】如何在 PickerView 顶部添加一个按钮以及如何在单击该按钮时关闭 PickerView?【英文标题】:How to add a button on top of a PickerView and How to dismiss the PickerView on click of that button? 【发布时间】:2011-12-12 07:33:01 【问题描述】:

我有一个 UIPickerView。我想在选择器视图顶部有一个完成按钮,并且我想在单击完成按钮时关闭选择器视图。你能帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

将操作表添加到您的视图中,然后添加带有完成按钮的工具栏 在操作表顶部和下方将您的选择器添加到操作表 在完成按钮中单击下面的方法以关闭操作表

[actionSheet dismissWithClickedButtonIndex:0 animated:YES];

actionSheet=[[UIActionSheet alloc] initWithTitle:@"" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
    [actionSheet showInView:self.view];
UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0,320,40)];
[pickerToolbar sizeToFit];
    pickerToolbar.barStyle = UIBarStyleBlackTranslucent;
NSMutableArray *barItems = [[NSMutableArray alloc] init];

    UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonSystemItemCancel target:self action:@selector(cancel_clicked:)];
    [barItems addObject:cancelBtn];
    [cancelBtn release];
    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    [barItems addObject:flexSpace];
    [flexSpace release];
    UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(done_clicked:)];
    [barItems addObject:doneBtn];
    [doneBtn release];
    [pickerToolbar setItems:barItems animated:YES];
    [actionSheet addSubview:pickerToolbar];
    [barItems release];
    [pickerToolbar release];

UIPickerView *picker = [[UIPickerView alloc] init];
picker.frame = CGRectMake(0, 44, 320, 216);
picker.delegate  = self;
        picker.dataSource = self;
        picker.showsSelectionIndicator = YES;
[actionSheet addSubview:picker];
[picker release];

-(void)done_clicked:(id)sender

    [actionSheet dismissWithClickedButtonIndex:0 animated:YES];

-(void)cancel_clicked:(id)sender

    [actionSheet dismissWithClickedButtonIndex:0 animated:YES];

【讨论】:

您能否发布有关如何添加操作表以及如何将选择器视图和工具栏添加到该操作表的代码?如果还提供了关闭选择器视图的代码,那将非常有帮助。非常感谢您的回复... 我无法打开以上链接。你能把内容贴在这里吗?那会很有帮助... 非常感谢...Supperbbb..它应该可以正常工作...我将在晚上实施相同的操作。如果这工作正常,我会告诉你..再次感谢及时的帮助.... 在上面提到的代码中,我想澄清一个小疑问。 PFB 代码..“ UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0,480,32)]; ”在这里你将 pcikerToolBar 的宽度指定为“480”,我猜这是错误的。我会用 320 画同样的宽度。如果我在这里错了,你能澄清一下吗? 不需要。我从安得拉邦【参考方案2】:

您可以将工具栏用于相同目的。看看this link。这里,考虑相同的解决方案。希望对您有所帮助。谢谢。

【讨论】:

比破解 UIActionSheet 好多了 @Sarah:你提供的链接比要求的复杂得多。我的要求只是处理一个基本的选择器视图和顶部的完成按钮,并在单击该完成按钮时关闭选择器视图。我们可以有一个更简单的版本吗?【参考方案3】:

每个主体都获取了操作表,然后添加了条形按钮,但只是从视图中添加了 uibutton 并从超级视图中获取方法删除。显示下面的例子,我试过这个代码成功。我认为这是非常有用的代码,无需使用操作表

 -(void)parserDidEndDocument:(NSXMLParser *)parser  NSLog(@"the marray data is %@",marray); // [self showpicker1]; if (marray.count == 0)  UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Error" message:@"NO DATA FOUND" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; [alert show]; 

[self showpicker1];


-(void)showpicker1  //view1=[[UIView alloc] initWithFrame:CGRectMake(55, 59, 171, 80)]; //[self.view addSubview:view1]; pv = [[UIPickerView alloc] initWithFrame:CGRectMake(55,79,171,0)]; pv.delegate = self; pv.dataSource = self; pv.showsSelectionIndicator = YES; [self.view addSubview:pv]; done=[UIButton buttonWithType:UIButtonTypeRoundedRect]; [done setFrame:CGRectMake(55, 59, 171, 20)]; [done setTitle:@"DONE" forState:UIControlStateNormal]; [done addTarget:self action:@selector(dismiss) forControlEvents:UIControlEventTouchDown]; [self.view addSubview:done];  -(void)dismiss  [pv removeFromSuperview]; [done removeFromSuperview]; 

【讨论】:

以上是关于如何在 PickerView 顶部添加一个按钮以及如何在单击该按钮时关闭 PickerView?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 TableView 顶部添加一个按钮

如何在UIPageViewController顶部添加按钮?

如何在IOS键盘顶部的键盘上添加完成按钮?

在表格视图顶部添加按钮 - 界面生成器

如何在uipickerview上添加完成按钮

如何只为 iPhone X 在顶部添加额外的高度?