如何更改iPhone上的返回键,而它正在编辑。 我知道
myTextField.returnKeyType = UIReturnKeySearch;
但是,如果我把这个只能[myTextField resignFirstResponder];
然后[myTextField becomeFirstResponder];
其中隐藏键盘,然后把它带回。 否则,它只是停留作为一个我收到了,在这种情况下,它是“去”。 我需要不断根据用户输入的文字转换他们。
在一个行:我如何改变键盘的回车键类型,而它仍然是编辑?
[textField reloadInputViews]
似乎这样的伎俩......
我发现它,而回,忘了后回到这里。 我在用:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:
(NSRange)range replacementString:(NSString *)string {
[self performSelector:@selector(addressBarTextDidChange:) withObject:nil afterDelay:0.1];
return YES;
}
-(void)addressBarTextDidChange:(NSString *)text {
NSString *addressText = @"..."; //Wherever you get your text from...
if ([addressText isEqualToString:@""]==NO) {
if ([addressText rangeOfString:@" "].location != NSNotFound) {
//[addressBarTextField setReturnKeyType:UIReturnKeySearch];
if (addressBarTextField.returnKeyType!=UIReturnKeySearch) {
[UIView beginAnimations:nil context:NULL]; //Setup the animation.
[UIView setAnimationDuration:0.0]; //The duration for the animation.
[addressBarTextField resignFirstResponder];
addressBarTextField.returnKeyType = UIReturnKeySearch;
[addressBarTextField becomeFirstResponder];
[UIView commitAnimations];
}
} else {
//[addressBarTextField setReturnKeyType:UIReturnKeyGo];
if (addressBarTextField.returnKeyType!=UIReturnKeyGo) {
[UIView beginAnimations:nil context:NULL]; //Setup the animation.
[UIView setAnimationDuration:0.0]; //The duration for the animation.
[addressBarTextField resignFirstResponder];
addressBarTextField.returnKeyType = UIReturnKeyGo;
[addressBarTextField becomeFirstResponder];
[UIView commitAnimations];
}
}
} else {
if (addressBarTextField.returnKeyType!=UIReturnKeyDone) {
[UIView beginAnimations:nil context:NULL]; //Setup the animation.
[UIView setAnimationDuration:0.0]; //The duration for the animation.
[addressBarTextField resignFirstResponder];
addressBarTextField.returnKeyType = UIReturnKeyDone;
[addressBarTextField becomeFirstResponder];
[UIView commitAnimations];
}
}
}
基本上,我在动画键盘进出为0.0秒(因此用户不会看到它)的持续时间。 我也检查,如果键盘是不是已经是一个我交换,因为不断切换的原因滞后之前想。
在我的情况是什么,它的工作是以下几点:
sender.returnKeyType=UIReturnKeyNext;
[sender reloadInputViews];
[sender resignFirstResponder];
[sender becomeFirstResponder];
我不得不强迫risignFirstResponder后跟一个becomeFirstResponder。
我做了一个自定义类别暴露returnKeyType。 只需要导入并做self.addField.returnKeyType = UIReturnKeySearch;
或任何你想设置为returnKeyType。 您还可以动态地当键盘已经打开使用它。 它会自动刷新。
这里是:
接口:
/*
Simple hack for exposing returnKeyType for UISearchBar without private APIs
For you from CodeBuffet ;)
Enjoy!
~PW
*/
#import <UIKit/UIKit.h>
@interface UISearchBar (ReturnType)
@property (nonatomic, readwrite) UIReturnKeyType returnKeyType;
@end
执行:
#import "UISearchBar+ReturnType.h"
@implementation UISearchBar (ReturnType)
UITextField *textField;
- (UITextField *) traverseForTextViewInViews: (NSArray*) views
{
// Traverse over all views recursively until we find the tresure TextField hidden deep the UISearchBar ocean!
for(UIView *subView in views) {
if([subView conformsToProtocol:@protocol(UITextInputTraits)]) {
return (UITextField *) subView;
}
UITextField *tv = [self traverseForTextViewInViews:subView.subviews];
if (tv) {
return tv;
}
}
return nil;
}
#pragma mark Custom Setters & Getters
- (void)setReturnKeyType:(UIReturnKeyType)returnKeyType
{
if (!textField) {
textField = [self traverseForTextViewInViews:self.subviews];
}
textField.returnKeyType = returnKeyType;
[self reloadInputViews];
[textField reloadInputViews];
}
- (UIReturnKeyType)returnKeyType
{
if (!textField) {
textField = [self traverseForTextViewInViews:self.subviews];
}
return textField.returnKeyType;
}
@end
我与3行代码做到了:
[sender setReturnKeyType:UIReturnKeyDone];
[sender resignFirstResponder];
[sender becomeFirstResponder];
我需要更新returnKeyType(下一个 - 转到<>)的基础上一个文本框的当前内容。 在文本框的reloadInputViews方法设置returnKeyType后没有工作,独自一人。 正如其他海报提到,一个resignFirstResponder接着是becomeFirstResponder是必要的。 在我的情况,当文本框成为firstResponder和显示的键盘,它会动画键盘的解雇和再现。 在较小的设备或在横向模式下,它也将导致包含文本框瞬间跳到图。 我发现隐藏此不必要的行为中的溶液是将resignFirstResponder和becomeFirstResponder在0秒的持续时间的动画块。
[UIView animateWithDuration:0.0
delay:0.0
options:0
animations:^{
[textField reloadInputViews];
[textField resignFirstResponder];
[textField becomeFirstResponder];
}
completion:nil];
你尝试使用文本字段的委托:
- (BOOL)textFieldShouldBeginEditing:(的UITextField *)的TextField {textField.returnKeyType = UIReturnKeySearch; return YES; 返回YES; } }
斯威夫特3
改变后returnKeyType
您的UITextField
或UITextView
电话:
textFieldOrView.resignFirstResponder()
textFieldOrView.becomeFirstResponder()
尽管调用textFieldOrView.reloadInputViews()
在某些情况下工作,它并不像上面的解决方案是安全的。