如何在使用 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时禁用键盘输入
使用 UITextField + UIPickerview 时禁用键盘输入