如何在uipickerview上添加完成按钮

Posted

技术标签:

【中文标题】如何在uipickerview上添加完成按钮【英文标题】:how to add done button on uipicker view 【发布时间】:2014-11-12 12:14:48 【问题描述】:

我在按钮单击操作上编写了以下代码,以创建 ui 选择器视图

- (IBAction)selectbtn:(id)sender 
    pickerview = [[UIPickerView alloc] initWithFrame:CGRectMake(5, 40, 300, 300)];
    pickerview.showsSelectionIndicator = YES;
    pickerview.hidden = NO;
    pickerview.delegate = self;
    [self.view addSubview:pickerview];

这是我的选择器代表

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView

    return 1;



-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component

    return self.jsonresultarr.count;



-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component


//    return [[self.jsonresultarr objectAtIndex:row] objectForKey:@"Company_Id"];
  //  NSObject *companyId = [[self.jsonresultarr objectAtIndex:row] objectForKey:@"Company_Id"];
    NSObject *companyName = [[self.jsonresultarr objectAtIndex:row] objectForKey:@"Company_Name"];
    return [NSString stringWithFormat:@"%@", companyName, nil];





-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

    self.Textbox.text=[[self.jsonresultarr objectAtIndex:row] objectForKey:@"Company_Name"];
    [self.pickerview removeFromSuperview];



我的问题是我想在 uipicker 视图上显示完成按钮,其功能是在我的文本字段中设置选定的值。我怎么能做到。提前感谢

【问题讨论】:

使用UIToolbar 并在其中添加UIBarbuttonItem。在选择器上方添加工具栏。 @Chinttu -Maddy- Ramani 请你告诉我,我是 ios 的新手 检查这个 (***.com/questions/20883388/…) 在按钮操作中添加选择器以查看时添加栏按钮删除视图 我如何在文本字段中设置日期? 【参考方案1】:

你可以用这个。首先在你的 self.view 中添加 UIView。添加UIPickerViewUIToolBar 初始化。并将 IBAction 方法与 UIBarButtonItem 绑定。请检查附件截图。

也许这会对你有所帮助。

【讨论】:

试试这个。它会帮助你。如果您没有找到答案。 thanx for idea 会尝试 :) @MishalAwan 如果任何答案对您有帮助,请标记为答案,以便对其他人有用。 这是很好的标准解决方案。谢谢!【参考方案2】:

你应该使用UIBarButtonItem && UIToolbar

// add a toolbar with Done button
UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
toolBar.barStyle = UIBarStyleBlackOpaque;

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneTouched:)];

[toolBar setItems:[NSArray arrayWithObjects:doneButton, nil]];
self.pickerViewTextField.inputAccessoryView = toolBar;

点击完成按钮时触发选择器视图

- (void)doneTouched:(UIBarButtonItem *)sender

    // hide the picker view
    [self.pickerViewTextField resignFirstResponder];

    // perform some action

您可以在didSelectRow委托方法中获取选定的值。

【讨论】:

然后将 UITapGestureRecognizer 添加到 UIBarButtonItem 并使用 UITapGestureRecognizer 参数调用 doneTouched 方法。【参考方案3】:

试试这个

  UIBarButtonItem *doneButton = [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(done)];
 cancelButton=[[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(cancel)];
[cancelButton setTintColor:[UIColor whiteColor]];
    UIToolbar *toolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height-PickerView.frame.size.height-50, 320, 50)];
    NSArray *toolbarItems = [NSArray arrayWithObjects:cancelButton,doneButton,nil];
[toolbar setItems:toolbarItems];
self.textfield1.inputAccessoryView = toolbar;

where is done 方法如下

-(void)done
 self.textfield1.text =[Array objectAtIndex:];
// for you it 
//self.Textbox.text=[[self.jsonresultarr objectAtIndex:[PickerView selectedRowInComponent:0]] objectForKey:@"Company_Name"];

而取消方法是

-(void)cancel
[self.view endEditing:YES];

【讨论】:

您是否使用上面的按钮单击操作更改@selector(done) 替换为您的操作完成 是什么意思??你想说什么......你可以在这里发布解决方案 你想要哪个动作 当我单击此按钮时,选择器视图的选定值将在 uitextfield 中设置 你的 -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 这个委托调用或其中任何一个。如果不检查您是否在 .h 文件中添加了委托【参考方案4】:

你可以简单地使用这个方法(适用于ios8)

actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil    
destructiveButtonTitle:nil otherButtonTitles:nil];

    [actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];
    CGRect pickerFrame = CGRectMake(0, 0, 0, 0);
    UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:pickerFrame];
    pickerView.showsSelectionIndicator = YES;
    pickerView.dataSource = self;
    pickerView.delegate = self;
    txtPriorityTemp=myTextField;
    [actionSheet addSubview:pickerView];

    alertController = [UIAlertController alertControllerWithTitle:nil
                                                          message:@"\n\n\n\n\n\n\n\n\n\n"
                                                   preferredStyle:UIAlertControllerStyleActionSheet];
    //pickerView.frame=CGRectMake(0, 0, 120, 30);
    UIView *toolView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 305.0f, 44.f)];
    toolView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"blank-headerNew.png"]];
    CGRect buttonFrame = CGRectMake(220, 5, 70, 30);
    UIButton *selButton = [[UIButton alloc] initWithFrame:buttonFrame];
    //[selButton setBackgroundImage:[UIImage imageNamed:@"red_bgnew.png"] forState:UIControlStateNormal];
    [selButton setTitle:@"Done" forState:UIControlStateNormal];
    [selButton addTarget: self
                  action: @selector(dismissActionSheet:)
        forControlEvents: UIControlEventTouchDown];
    selButton.tag= myTextField.tag+10;
    [toolView addSubview:selButton];
    [alertController.view addSubview:pickerView];
    [alertController.view addSubview:toolView];
    [self presentViewController:alertController animated:YES completion:nil];
    

【讨论】:

以上是关于如何在uipickerview上添加完成按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有完成按钮的工具栏添加到 UIPickerView?

仅在单击完成按钮时将 UIPickerView 选择添加到 TextField

如何在 UIPickerView 上添加 UIToolbar? (iPhone/iPad)

使用 UIToolBar 上的完成按钮关闭 UIPickerView

为 UIPickerView 创建一个完成按钮

如何使用完成按钮确认我在 UIPickerView 中的选择?