隐藏具有多个textField的IOS键盘

时间:2012-07-11 22:41:45

标签: iphone objective-c ios

我有两个textField并排,countryCodeTextField和cellphoneTextField

在countryCodeTextField上。我有一个动作selectCountry,发生在countryCodeTextField上的Edit Did Begin


- (IBAction)selectCountry:(id)sender {
    countryCodeTextField.delegate = self;
    [countryCodeTextField resignFirstResponder];

  • 请注意,self实现了<UITextFieldDelegate>

问题是当用户点击手机时,如果他点击countryCodeTextField键盘就会显示,键盘永远不会被解雇。

如果此人首先点击countryCode,那么键盘永远不会出现(这就是我想要的)。

当用户先点击cellphoneTextField然后再点击countryCodeTextField时,为什么不隐藏键盘?

3 个答案:

答案 0 :(得分:1)

如果您不希望用户能够编辑特定的UITextField,请将其设置为不启用。

 UITextField *textField = ... // Allocated somehow
 textfield.enabled = NO

或者只需选中Interface Builder中的启用复选框即可。然后文本字段仍然存在,您将能够通过配置文本来更新它。但正如评论中提到的那样,用户希望UITextFields可以编辑。

另外,为什么要在IBAction回调中设置委托?我认为你最好在Interface Builder中或在代码中创建UITextField时这样做。

编辑:

好的 - 所以你希望用户能够选择这个框,但是然后调出一个自定义的子视图,从中选择一些可以填充框的东西。

因此,在创建UITextField委托时(如上所述)设置它并从UITextFieldDelegate协议实现以下内容:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
     return NO;
}

返回NO。请注意,如果您为两个UITextField使用相同的委托,则需要使此方法对其他字段返回YES。例如,像:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
   if (textField == countryTextField)  
       return NO;
   return YES;
}

希望这可以阻止显示键盘 - 现在你必须弄清楚如何解雇你自己的子视图,我建议通过IBAction(触摸或某些东西)来做。你必须在这里测试各种各样的东西,但是记住你有点破坏了UITextField的观点,也许它会起作用,也许它不会,也许它会在下一次iOS升级中破坏。

答案 1 :(得分:0)

好的,首先,我认为你不应该使用UITextField。我认为你应该使用UIButton并将当前值显示为按钮的标题。但是,如果你有心脏,我会使用我们的好朋友inputViewUITextField上的属性,并将其设置为您的自定义输入视图(我假设是UIPickerView或类似的。 )

这有一个额外的好处,就是不会对盲人和视障用户造成严重破坏你的应用程序,在你搞乱标准行为之前你可能应该注意这些。

答案 2 :(得分:0)

在你的方法中:

- (IBAction)textFieldDidBeginEditing: (UITextField *)textField

称之为:     [textField becomeFirstResponder];

并对两个字段应用检查,即当textField为countryCodeTextField时写:

[textField resignFirstResponder];

并调用您的方法:

[self selectCountry];

在此方法中显示国家/地区代码列表。

所以你的代码将是:

 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    return YES;
}
 - (IBAction)textFieldDidBeginEditing: (UITextField *)textField{

    [textField becomeFirstResponder];

    if (textField == countryCodeTextField){

    [textField resignFirstResponder];
    [self selectCountry];
    }
}

-(IBAction)selectCountry{
    //display the list no need to do anything with the textfield.Only set text of TextField as the selected countrycode.
}