如何更改returnKeyType而编辑?(How do I change returnKeyTyp

2019-06-23 17:39发布

如何更改iPhone上的返回键,而它正在编辑。 我知道

myTextField.returnKeyType = UIReturnKeySearch;

但是,如果我把这个只能[myTextField resignFirstResponder]; 然后[myTextField becomeFirstResponder]; 其中隐藏键盘,然后把它带回。 否则,它只是停留作为一个我收到了,在这种情况下,它是“去”。 我需要不断根据用户输入的文字转换他们。


在一个行:我如何改变键盘的回车键类型,而它仍然是编辑?

Answer 1:

[textField reloadInputViews]似乎这样的伎俩......



Answer 2:

我发现它,而回,忘了后回到这里。 我在用:

- (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秒(因此用户不会看到它)的持续时间。 我也检查,如果键盘是不是已经是一个我交换,因为不断切换的原因滞后之前想。



Answer 3:

在我的情况是什么,它的工作是以下几点:

sender.returnKeyType=UIReturnKeyNext;
[sender reloadInputViews];
[sender resignFirstResponder];
[sender becomeFirstResponder];

我不得不强迫risignFirstResponder后跟一个becomeFirstResponder。



Answer 4:

我做了一个自定义类别暴露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


Answer 5:

我与3行代码做到了:

[sender setReturnKeyType:UIReturnKeyDone];
[sender resignFirstResponder];
[sender becomeFirstResponder];


Answer 6:

我需要更新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];


Answer 7:

你尝试使用文本字段的委托:

- (BOOL)textFieldShouldBeginEditing:(的UITextField *)的TextField {textField.returnKeyType = UIReturnKeySearch; return YES; 返回YES; } }



Answer 8:

斯威夫特3

改变后returnKeyType您的UITextFieldUITextView电话:

textFieldOrView.resignFirstResponder()
textFieldOrView.becomeFirstResponder()

尽管调用textFieldOrView.reloadInputViews()在某些情况下工作,它并不像上面的解决方案是安全的。



文章来源: How do I change returnKeyType while editing?