我有两个textField并排,countryCodeTextField和cellphoneTextField
在countryCodeTextField上。我有一个动作selectCountry,发生在countryCodeTextField上的Edit Did Begin
- (IBAction)selectCountry:(id)sender {
countryCodeTextField.delegate = self;
[countryCodeTextField resignFirstResponder];
<UITextFieldDelegate>
。问题是当用户点击手机时,如果他点击countryCodeTextField键盘就会显示,键盘永远不会被解雇。
如果此人首先点击countryCode,那么键盘永远不会出现(这就是我想要的)。
当用户先点击cellphoneTextField然后再点击countryCodeTextField时,为什么不隐藏键盘?
答案 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并将当前值显示为按钮的标题。但是,如果你有心脏,我会使用我们的好朋友inputView
,UITextField
上的属性,并将其设置为您的自定义输入视图(我假设是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.
}