私は を使用してきましたUIPickerView
。私の質問は簡単です。ピッカー ビューが表示されているときにビューを無効にする方法です。これにより、ユーザーがビュー内で何も変更していないことを確認できます。私は : メソッドで試しましsetuserInteractinEnabled
たが、ピッカービューも無効になっています..任意のアイデア..?
7 に答える
私は似たようなことをしなければならずUIActionSheet
、ピッカービューを追加するために をサブクラス化しました。アクション シートが起動している間は、下にあるビューを操作できません。
UIActionSheet に UIPickerView を追加する方法など、UIPickerView
をに追加する方法については、SO でいくつかの例を見つけることができます。UIActionSheet
ひとつの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
}
これがお役に立てば幸いです...
@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)];
私は通常、透明度が 50% で背景が黒の UIView を追加します。これにより、次の 3 つの問題が解決されます。
- カスタム ビュー (pickerview またはその他のユーザー入力フィールド)
- 薄暗い背景 - ユーザーが何をする必要があるかに気付くように
- ピッカービュー/テキスト入力などでのみ利用可能なユーザー操作
同じ問題がありました。UIPickerView の背後にあるボタンは、内部のピッカービューをタップしたときにアクションを実行しますが、ボタンは表示されませんでしたが、ピッカービューのみが表示されます。ボタンアクションのビューの非表示プロパティを使用して管理していました。お気に入り
@IBAction func tapPrivacyPolicy(_ sender: Any) {
if viewDatePicker.isHidden == false { // means UIPickerView is Visible
return
}
//do other work
}
ピッカーのクリックを無効にするには:
fooPicker.isUserInteractionEnabled = false