如果用户在其他地方单击然后 UIPickerView,如何使 UIPickerView resignFirstResponder
How to make UIPickerView resignFirstResponder if user clicks in other place then UIPickerView
我创建了 UIPickerView,如下所示。现在我想让它 resignFirstResponder 如果用户在其他地方点击然后 UIPickerView 我怎么能实现呢。我创建了 UIPickerView 如下 way.Where 否则我可以处理
[pickerView removeFromSuperview];
-(void)pickerview:(id)sender
{
_items =[[NSArray alloc]initWithObjects:@"Hindi",@"English",@"In what city were you born?",
@"What was your childhood nickname?",
@"Type your own question.",nil];
pickerView=[[UIPickerView alloc] initWithFrame:CGRectMake(10,350,300,300)];
pickerView.transform = CGAffineTransformMakeScale(0.75f, 0.75f);
pickerView.delegate = self;
pickerView.dataSource = self;
pickerView.showsSelectionIndicator = YES;
pickerView.backgroundColor = [UIColor lightGrayColor];
[pickerView selectRow:1 inComponent:0 animated:YES];
// [self.view addSubview:pickerView];
[contentView addSubview:pickerView];
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
{
return [_items count];
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return[_items objectAtIndex:row];
}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
[Txt_SecurityQue setText:[_items objectAtIndex:row]];
NSLog(@"Did select");
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:YES];
UITapGestureRecognizer *tap=[[UITapGestureRecognizer
alloc]initWithTarget:self action:@selector(Tap)];
[contentView addGestureRecognizer:tap];
}
-(void)Tap {
//write the UIPickerView resignFirstResponder code......
}
或者您可以简单地添加:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
[pickerView removeFromSuperview];
// write resignFirstResponder code......
}
- (IBAction)btnCancel_Click:(id)sender
{
[self.mypcikerview setHidden:YES];
}
- (IBAction)btnSelect_Click:(id)sender
{
NSInteger row = [myPickerView selectedRowInComponent:0];
labelQuestion.text = [NSString stringWithFormat:@"%@",[array_from objectAtIndex:row]];
[self.mypcikerview setHidden:YES];
}
where mypickerview is UIView with Pickerview , Select and cancel button
Swift 4
重写 touchesBegan 方法,该方法在用户点击 pickerView 外部的视图时调用。然后你可以简单地调用隐藏pickerview。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
pickerView.isHidden = true
}
进一步阅读如何使用 touchesBegan:
https://developer.apple.com/documentation/uikit/uiresponder/1621142-touchesbegan
我创建了 UIPickerView,如下所示。现在我想让它 resignFirstResponder 如果用户在其他地方点击然后 UIPickerView 我怎么能实现呢。我创建了 UIPickerView 如下 way.Where 否则我可以处理
[pickerView removeFromSuperview];
-(void)pickerview:(id)sender
{
_items =[[NSArray alloc]initWithObjects:@"Hindi",@"English",@"In what city were you born?",
@"What was your childhood nickname?",
@"Type your own question.",nil];
pickerView=[[UIPickerView alloc] initWithFrame:CGRectMake(10,350,300,300)];
pickerView.transform = CGAffineTransformMakeScale(0.75f, 0.75f);
pickerView.delegate = self;
pickerView.dataSource = self;
pickerView.showsSelectionIndicator = YES;
pickerView.backgroundColor = [UIColor lightGrayColor];
[pickerView selectRow:1 inComponent:0 animated:YES];
// [self.view addSubview:pickerView];
[contentView addSubview:pickerView];
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
{
return [_items count];
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return[_items objectAtIndex:row];
}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
[Txt_SecurityQue setText:[_items objectAtIndex:row]];
NSLog(@"Did select");
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:YES];
UITapGestureRecognizer *tap=[[UITapGestureRecognizer
alloc]initWithTarget:self action:@selector(Tap)];
[contentView addGestureRecognizer:tap];
}
-(void)Tap {
//write the UIPickerView resignFirstResponder code......
}
或者您可以简单地添加:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
[pickerView removeFromSuperview];
// write resignFirstResponder code......
}
- (IBAction)btnCancel_Click:(id)sender
{
[self.mypcikerview setHidden:YES];
}
- (IBAction)btnSelect_Click:(id)sender
{
NSInteger row = [myPickerView selectedRowInComponent:0];
labelQuestion.text = [NSString stringWithFormat:@"%@",[array_from objectAtIndex:row]];
[self.mypcikerview setHidden:YES];
}
where mypickerview is UIView with Pickerview , Select and cancel button
Swift 4
重写 touchesBegan 方法,该方法在用户点击 pickerView 外部的视图时调用。然后你可以简单地调用隐藏pickerview。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
pickerView.isHidden = true
}
进一步阅读如何使用 touchesBegan: https://developer.apple.com/documentation/uikit/uiresponder/1621142-touchesbegan