如何在使用 UIPickerView 时禁用视图

Posted

技术标签:

【中文标题】如何在使用 UIPickerView 时禁用视图【英文标题】:How to disable the view while using UIPickerView 【发布时间】:2012-10-22 09:41:38 【问题描述】:

我一直在使用UIPickerView,我的问题很简单,如何在显示选择器视图时禁用视图,以便我们可以确保用户不会更改视图中的任何内容。我尝试过使用setuserInteractinEnabled: 方法,但它也禁用了选择器视图..有什么想法..?

【问题讨论】:

看看这个帖子可能对你有帮助***.com/questions/5404856/… 你是否有任何文本字段来调用你的pickerview。如果你有这样的然后在textfieldDidBeginEditing方法中禁用。如果你想禁用除了pickerview之外的整个视图,那么你需要单独禁用所有视图 @R.A 不,我没有任何文本字段,我正在使用按钮。 【参考方案1】:

我不得不做一些类似的事情,并将UIActionSheet 子类化以向其添加选择器视图。当 Action Sheet 启动时,您无法与底层视图交互。

您可以在此处找到一些示例,了解如何将UIPickerView 添加到UIActionSheet,例如how to add UIPickerView in UIActionSheet

【讨论】:

【参考方案2】:

您有多种选择:

    如果您使用的是 Ipad,则在弹出窗口中显示选择器:Popover 如果您使用的是 Iphone,请将其显示在操作表 (UIActionSheet) 中:Action sheet 使用当前模式视图控制器显示选择器

这 3 个选项可以阻止父视图的触摸事件。

【讨论】:

【参考方案3】:

取一个UIView 名字 viewBack 像下面这样

@interface ViewController : UIViewController
    UIView *viewBack;

viewDidLoad: 方法中只定义这个viewBackwith框架即

- (void)viewDidLoad

        viewBack = [[UIView alloc] initWithFrame:CGRectMake(95, 230, 130, 40)];
        viewBack.backgroundColor = [UIColor blackColor];
        viewBack.alpha = 0.7f;
        viewBack.layer.masksToBounds = NO;
        viewBack.layer.cornerRadius = 8; 
        viewBack.hidden =YES;

当你想在那个时候显示UIPickerView 时,会出现这样的屏幕..

-(IBAction)btnPickerViewOpen_Clicked:(id)sender 
         viewBack.hidden = NO;
        [self.view bringSubviewToFront:viewBack];
        [self.view bringSubviewToFront:yourPickerView];

当你想隐藏UIPickerView当时使用波纹管流程......

-(IBAction)btnPickerViewClosed_Clicked:(id)sender 
         viewBack.hidden = YES;
        // also hide pickerview with your requirement

希望对你有帮助……

【讨论】:

【参考方案4】:

我通常添加额外的具有 50% 透明度和黑色背景的 UIView - 这解决了三个问题:

自定义视图(pickerview 或任何其他用户输入字段) 背景变暗 - 以便用户注意到需要做什么 仅在pickerview/文本输入/等上可用的用户交互

【讨论】:

【参考方案5】:

您只需要尝试@Rene Jennrich 的答案.. 您需要查看一些示例.. 如果需要,请尝试此代码..

    UIActionSheet *inputActionSheet = [[UIActionSheet alloc] initWithTitle:nil 
                                                   delegate:nil
                                          cancelButtonTitle:nil
                                     destructiveButtonTitle:nil
                                          otherButtonTitles:nil];
    [inputActionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];

    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:UIBarButtonItemStyleBordered target:self action:@selector(cancelButtonPressed:)];
    [barItems addObject:cancelBtn];
    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    [barItems addObject:flexSpace];
    UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneButtonPressed:)];
    [barItems addObject:doneBtn];
    [pickerToolbar setItems:barItems animated:YES];
    [inputActionSheet addSubview:pickerToolbar];

    UIPickerView fontPickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, 40, 0, 0)];
    fontPickerView.showsSelectionIndicator = YES;
    [fontPickerView setTag:1];
    [fontPickerView setDelegate:self];
    [fontPickerView setDataSource:self];
    [inputActionSheet addSubview:fontPickerView]; 
    [inputActionSheet showInView:[[UIApplication sharedApplication] keyWindow]];
    [inputActionSheet setBounds:CGRectMake(0, 0, 320, 485)];

【讨论】:

【参考方案6】:

我有同样的问题。当我点击里面的pickerview时,UIPickerView后面的按钮会采取行动,尽管按钮不可见,只有pickerview可见。我使用按钮操作视图的隐藏属性对其进行了管理。喜欢

  @IBAction func tapPrivacyPolicy(_ sender: Any) 
    if viewDatePicker.isHidden == false  // means UIPickerView is Visible
          return
    
   //do other work 

【讨论】:

【参考方案7】:

禁用选择器被点击:

fooPicker.isUserInteractionEnabled = false

【讨论】:

以上是关于如何在使用 UIPickerView 时禁用视图的主要内容,如果未能解决你的问题,请参考以下文章

使用UITextField + UIPickerview时禁用键盘输入

选择自定义选择器视图中的第一行时如何禁用按钮?

如何正确禁用 UIPickerView 组件滚动?

使用 UITextField + UIPickerview 时禁用键盘输入

如何使用 UIPickerView 在一个视图中填充不同的文本字段?

在 iOS 7/Objective-C 中,如何以编程方式将 UIPickerView 捕捉到它所在的父视图的底部?