我在UIActionSheet中有一个UIDatePickerView作为UITextField的输入。当专注于UITextField时,UIActionSheet将弹出而不是键盘。当点击UIActionSheet中的完成按钮时,它将隐藏。我有几个其他文本字段表现正常(显示键盘)。
- (void)textFieldDidBeginEditing:(UITextField *)textField {
if ([textField isEqual:txtExpDate]) {
[textField resignFirstResponder];
[self showDatePicker];
}
}
- (void) showDatePicker{
UIActionSheet *datePickerActionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"Done" otherButtonTitles:nil];
datePickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 80, 0, 0)];
datePickerView.datePickerMode = UIDatePickerModeDate;
[datePickerActionSheet addSubview:datePickerView];
[datePickerActionSheet showInView:self.navigationController.view];
[datePickerActionSheet setBounds:CGRectMake(0, 0, 320, 500)];
[datePickerActionSheet release];
}
现在我的问题是,让我们说第一个用户点击普通文本字段。哪个会弹出键盘。然后,如果没有选择完成按钮,他会点击日期字段。哪个会弹出操作表(不解除键盘)。隐藏动作表后,用户必须点击其他文本字段并单击键盘的返回键。
如果要弹出操作表,我想隐藏键盘?
答案 0 :(得分:7)
在您打开活动表时,将文本字段 resignFirstResponder 。如果您有多个文本字段,请在 .h 文件中创建UITextField类型的实例变量。
UITextField *currentTextField;
然后,您可以在 textFieldDidBeginEditing:方法中保留当前文本字段的引用。
- (void)textFieldDidBeginEditing:(UITextField *)textField {
currentTextField = textField;
....
并在 showDatePicker 方法中调用 [currentTextField resignFirstResponder] 。
- (void)showDatePicker {
[currentTextField resignFirstResponder];
UIActionSheet *datePickerActionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"Done" otherButtonTitles:nil];
...
编辑: @Samuel Goodwin是正确的。我们不必跟踪文本字段。我们可以简单地执行以下操作来关闭键盘。
- (void)showDatePicker {
[self.view endEditing:YES];
...
答案 1 :(得分:3)
如果您想以任何理由解雇键盘,只需执行以下操作:
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) target:nil forEvent:nil];
适用于任何地方的所有文本字段。
答案 2 :(得分:0)
EmptyStack提出的方法对我不起作用(使用xcode 4.2)。我在方法[currentTextField resignFirstResponder]
中放置了willPresentActionSheet:(UIActionSheet *)actionSheet
消息,但也没有用。然后我把信息放在actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
中,这就是诡计......奇怪!
答案 3 :(得分:0)
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if ([textField isEqual:txtExpDate]) {
[self showDatePicker];
return NO;
}
return YES;
}
答案 4 :(得分:0)
我知道这是一个非常古老的帖子,但我只是想我会添加对我有用的解决方案(其他人没有)。我发现我必须重新分配一个文本字段作为第一响应者再次辞职。无论哪个文本字段变为第一响应者状态都没关系,这只是放弃键盘的一种方式。
[self.textfield becomeFirstResponder];
[self.textfield resignFirstResponder];
答案 5 :(得分:0)
工作正常。
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
if(textField==myTextField2){
[myTextField1 resignFirstResponder];
[self showActionSheet];
return NO;
}
return YES;
}