ActionSheetStringPickerselect器视图的UITextView问题

这里是截图。

首先在这里检查3个屏幕截图。

屏幕截图1:主题是UITextview字段。 当我点击主题文本字段将正常键盘来。 这里现在没有问题。

屏幕截图2:优先级是UITextfield视图。 这里我使用UIActionsheet Picker视图。 当我点击优先文本字段select器将出现如截图所示。 这也工作正常。

我的问题 :当我通过滚动而不使用完成button或从键盘上的下一个button直接从主题文本视图单击优先文本字段。 然后下面的问题到达。

或者当我将UITextview移动到其他任何其他文本字段,如帮助主题文本字段或源文本字段(在此文本字段UIActionsheet使用。)同样的问题到达。

查看屏幕截图3。

在这里,键盘和UIActionsheet都出现了。 这里键盘没有隐藏,它仍然在出现。 它不会出现在这里,当我移动到这里UITextView下一个文本字段,即在UIActionsheetselect器,它只显示select器VIew。

我没有得到什么问题。 有人请告诉我的解决scheme。

这是一些代码,

@interface EditDetailTableViewController () { NSNumber *help_topic_id; NSNumber *priority_id; NSMutableArray * pri_idArray; NSMutableArray * helpTopic_idArray; } - (void)helpTopicWasSelected:(NSNumber *)selectedIndex element:(id)element; - (void)priorityWasSelected:(NSNumber *)selectedIndex element:(id)element - (void)actionPickerCancelled:(id)sender; @end @implementation EditDetailTableViewController - (void)viewDidLoad { [super viewDidLoad]; help_topic_id=[[NSNumber alloc]init]; priority_id=[[NSNumber alloc]init]; } -(void)removeKeyBoard { [self.subjectTextView resignFirstResponder]; } - (IBAction)priorityClicked:(id)sender { [_priorityTextField resignFirstResponder]; if (!_priorityArray||![_priorityArray count]) { _priorityTextField.text=NSLocalizedString(@"Not Available",nil); priority_id=0; }else{ [ActionSheetStringPicker showPickerWithTitle:@"Select Priority" rows:_priorityArray initialSelection:0 target:self successAction:@selector(priorityWasSelected:element:) cancelAction:@selector(actionPickerCancelled:) origin:sender]; } } - (IBAction)helpTopicClicked:(id)sender { [_helpTopicTextField resignFirstResponder]; if (!_helptopicsArray||!_helptopicsArray.count) { _helpTopicTextField.text=NSLocalizedString(@"Not Available",nil); help_topic_id=0; }else{ [ActionSheetStringPicker showPickerWithTitle:@"Select Helptopic" rows:_helptopicsArray initialSelection:0 target:self successAction:@selector(helpTopicWasSelected:element:) cancelAction:@selector(actionPickerCancelled:) origin:sender]; } } - (void)priorityWasSelected:(NSNumber *)selectedIndex element:(id)element { priority_id=(pri_idArray)[(NSUInteger) [selectedIndex intValue]]; //self.selectedIndex = [selectedIndex intValue]; //may have originated from textField or barButtonItem, use an IBOutlet instead of element self.priorityTextField.text = (_priorityArray)[(NSUInteger) [selectedIndex intValue]]; } - (void)helpTopicWasSelected:(NSNumber *)selectedIndex element:(id)element { help_topic_id=(helpTopic_idArray)[(NSUInteger) [selectedIndex intValue]]; // self.selectedIndex = [selectedIndex intValue]; //may have originated from textField or barButtonItem, use an IBOutlet instead of element self.helpTopicTextField.text = (_helptopicsArray)[(NSUInteger) [selectedIndex intValue]]; } #pragma mark - UITextFieldDelegate - (void)textFieldDidBeginEditing:(UITextField *)textField { if (textField.tag==1) { [_priorityTextField resignFirstResponder]; _priorityTextField.tintColor = [UIColor clearColor]; if (!_priorityArray||![_priorityArray count]) { _priorityTextField.text=NSLocalizedString(@"Not Available",nil); priority_id=0; }else{ [ActionSheetStringPicker showPickerWithTitle:@"Select Priority" rows:_priorityArray initialSelection:0 target:self successAction:@selector(priorityWasSelected:element:) cancelAction:@selector(actionPickerCancelled:) origin:self.view]; } // return NO; }else if(textField.tag==2){ //[_subjectTextField resignFirstResponder]; [_helpTopicTextField resignFirstResponder]; _helpTopicTextField.tintColor = [UIColor clearColor]; if (!_helptopicsArray||!_helptopicsArray.count) { _helpTopicTextField.text=NSLocalizedString(@"Not Available",nil); help_topic_id=0; }else{ [ActionSheetStringPicker showPickerWithTitle:@"Select Helptopic" rows:_helptopicsArray initialSelection:0 target:self successAction:@selector(helpTopicWasSelected:element:) cancelAction:@selector(actionPickerCancelled:) origin:self.view]; } // return NO; }else{ } // return YES; } -(BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES; } - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { //[textView resignFirstResponder]; if(textView == _subjectTextView) { if([text isEqualToString:@" "]) { if(!textView.text.length) { return NO; } } if([textView.text stringByReplacingCharactersInRange:range withString:text].length < textView.text.length) { return YES; } if([textView.text stringByReplacingCharactersInRange:range withString:text].length >100) { return NO; } NSCharacterSet *set=[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "]; if([text rangeOfCharacterFromSet:set].location == NSNotFound) { return NO; } } return YES; } @end 

我想下面的IBAction代码:

 - (IBAction)staffClicked:(id)sender { [self.view endEditing:YES]; if (!_staffArray||!_staffArray.count) { _assignTextField.text=NSLocalizedString(@"Not Available",nil); staff_id=0; }else{ [ActionSheetStringPicker showPickerWithTitle:NSLocalizedString(@"Select Assignee",nil) rows:_staffArray initialSelection:0 target:self successAction:@selector(staffWasSelected:element:) cancelAction:@selector(actionPickerCancelled:) origin:sender]; } } 

…和以下方法:

 - (void)staffWasSelected:(NSNumber *)selectedIndex element:(id)element { staff_id=(staff_idArray)[(NSUInteger) [selectedIndex intValue]]; self.assignTextField.text = (_staffArray)[(NSUInteger) [selectedIndex intValue]]; } - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { return NO; } 

…会为你解决你的问题。

这是因为计时问题行动select器将需要一些时间来重新加载键盘上的select器

顺便说一句,你应该改变你的代码在这里也实现相同的textFieldDidBeginEditing

 - (IBAction)priorityClicked:(id)sender { [_priorityTextField resignFirstResponder]; if (!_priorityArray||![_priorityArray count]) { _priorityTextField.text=NSLocalizedString(@"Not Available",nil); priority_id=0; }else{ [ActionSheetStringPicker showPickerWithTitle:@"Select Priority" rows:_priorityArray initialSelection:0 target:self successAction:@selector(priorityWasSelected:element:) cancelAction:@selector(actionPickerCancelled:) origin:sender]; } } 

其他部分,你应该像下面的一些延迟之后调用showPickerWithTitle方法

 else{ [self performSelector:@selector(openPickerWithDelay:) withObject:sender afterDelay:0.5]; // Change 0.5 to whatever you want. } 

添加新的方法

 -(void) openPickerWithDelay:(id) sender { [ActionSheetStringPicker showPickerWithTitle:@"Select Priority" rows:_priorityArray initialSelection:0 target:self successAction:@selector(priorityWasSelected:element:) cancelAction:@selector(actionPickerCancelled:) origin:sender]; } 

否则,你可以延迟

 double delayInSeconds = 0.5; // Change 0.5 to whatever you want. dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ // Do your stuff here });