【问题标题】:How do you hide a UIPickerview on button tap programmatically?如何以编程方式在按钮点击时隐藏 UIPickerview?
【发布时间】:2025-11-26 16:35:02
【问题描述】:

我在 uitablview 原型单元格中有一个 uipickerivew,我只想在按下完成按钮时隐藏。请帮帮我。

这是我如何创建 uipickeriview 和完成按钮的代码。

 self.pickerView = [[UIPickerView alloc] initWithFrame:(CGRect){{0, 0}, 330, 200}];
self.pickerView.delegate = self;
self.pickerView.dataSource = self;
self.pickerView.center = (CGPoint){160, 640};
self.pickerView.hidden = YES;
self.pickerView.backgroundColor =[UIColor whiteColor];

[self.view addSubview:self.pickerView];





UIToolbar *toolBar= [[UIToolbar alloc] initWithFrame:CGRectMake(0,0,320,44)];
[toolBar setBarStyle:UIBarStyleBlackOpaque];
UIBarButtonItem *flex = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];

UIBarButtonItem *barButtonDone = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                                                                  style:UIBarButtonItemStyleBordered
                                                                 target:self
                                                                 action:@selector(pickerDoneClicked)];
toolBar.items = @[barButtonDone];
toolBar.items = @[flex, barButtonDone];
barButtonDone.tintColor = [UIColor lightGrayColor];
[_pickerView addSubview:toolBar];


-(void) pickerDoneClicked {

[_pickerView resignFirstResponder];

}

【问题讨论】:

  • 首先你在原型单元中有一个pickerView,或者它是你的主视图的子视图?您以编程方式将 pickerView 作为 subView 添加到主视图以及您在哪里实现 pickerDoneClicked 方法?
  • self.pickerview.hidden=YES;
  • 感谢您的回复女士,当我选择行时,此行隐藏选择器视图,我想在单击完成按钮时隐藏它。
  • 请给我一些想法?
  • 使用 [self.view removeFromSuperview];

标签: ios uibutton uipickerview


【解决方案1】:

最好不要每次都创建和删除,而是在视图加载后创建您的pickerview,然后在您的单元格中执行:

[_pickerView becomeFirstResponder];

(将其显示为键盘动画)。

然后,您可以创建一个 pickerDoneClicked 方法(在点击 Done 时调用)以在您的 pickerview 上调用 resignFirstResponder(以将其动画化):

-(void) pickerDoneClicked {
[_pickerView resignFirstResponder];
}

【讨论】:

    【解决方案2】:

    只需在 IBAction 方法下方添加并调用 removefromsuperview 方法,

    -(void)pickerDoneClicked{
    [self.pickerView removeFromSuperview];}
    

    因为你每次都在重新添加,你可以直接从superview中删除,然后重新添加。

    【讨论】:

    • 我将如何以编程方式进行
    • 我编辑了我的答案,请在您的代码中使用该函数。它与您在 barButtonDone 点击事件中给出的名称相同。
    【解决方案3】:

    使用选择器视图选择值后,您可以实现此方法。添加带有完成按钮的工具栏并为完成按钮执行操作

    - (IBAction)doneClicked:(id)sender {
     [yourTextfield resignFirstResponder];
    }
    

    在用拾取器作为输入选择到文本字段的值时使用此方法。

    【讨论】:

      【解决方案4】:
      - (void)viewDidLoad {
      
        self.pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 330, 200)];
        self.pickerView.delegate = self;
        self.pickerView.dataSource = self;
        self.pickerView.backgroundColor =[UIColor whiteColor];
      
       [self.view addSubview:self.pickerView];
      
         UIToolbar *toolBar= [[UIToolbar alloc] initWithFrame:CGRectMake(0,0,320,44)];
        [toolBar setBarStyle:UIBarStyleBlackOpaque];
       UIBarButtonItem *barButtonDone = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                                                                       style: UIBarButtonItemStylePlain
                                                                      target:self
                                                                      action:@selector(pickerDoneClicked:)];
         UIBarButtonItem *flex = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
      
              toolBar.items = @[flex, barButtonDone];
             barButtonDone.tintColor = [UIColor lightGrayColor];
           [self.view addSubview:toolBar];
      
      
         }
      
      
      -(IBAction)pickerDoneClicked:(id)sender
        {
               pickerView.hidden = YES;
      
         }
      

      【讨论】:

        【解决方案5】:

        在 didiSelectRow 方法里面添加这行代码:

        self.view.endEditing(true)
        

        【讨论】: