使用苹果键盘中的返回按钮进行导航

Posted

技术标签:

【中文标题】使用苹果键盘中的返回按钮进行导航【英文标题】:Navigation using return button in apple keyboard 【发布时间】:2014-09-02 07:06:17 【问题描述】:

我的视图控制器中有多个文本字段,如何使用 ios 键盘中的返回按钮从一个文本字段导航到另一个文本字段。

【问题讨论】:

你可以为此使用标签 @BHASKAR 你能告诉我怎么做,因为我是 ios 新手 在此处显示此链接是下一个上一个按钮***.com/questions/5591792/…的解决方案 【参考方案1】:

使用UITextFieldDelegate 委托和textFieldShouldReturn: 方法。在里面你可以得到textfield的标签,并根据这个信息直接指向另一个参数。

要让委托工作,您必须将发送者(文本字段)的委托属性设置为接收者(例如您的视图控制器)

myTextField.delegate = self;

或在故事板中执行 (here is some storyboard hints)。然后,您的视图控制器需要按如下方式指定此委托(在“h”文件中):

@interface MyViewController:UIViewController<UITextFieldDelegate>
@end

然后在“m”文件中

-(BOOL)textFieldShouldReturn:(UITextField*)textfield
    if([textfield tag] == 1)
    
        //pass focus to next textfield
        [self.nextTextField becomeFirstResponder];
     else 
        //remove focus from current textfield
        [textfield resignFirstResponder];//
    
    return YES;//YES if textfield should implement its default behaviour

【讨论】:

我在我的视图控制器中写这个方法没有任何改变 您是否在文本字段上设置了delegate 以指向您的视图控制器? 如果您想从文本字段导航到按钮,请再问一个问题,我该怎么做? 我还没有尝试过,但我想UIResponderbecomeFirstResponder 的方式同样适用于UIButton【参考方案2】:
-(BOOL) textFieldShouldReturn: (UITextField *) textField 
  
   [textField resignFirstResponder];
    if(textField == _your1stTextField)
       [_your2ndTextField becomeFirstResponder];
    return YES;
  

【讨论】:

【参考方案3】:

试试这个...

为所有文本字段设置代表,然后..

   - (BOOL)textFieldShouldReturn:(UITextField *)textField 
    
       if (textField == textField1)
       
         [textField2 becomeFirstResponder];
       
       else if (textField == textField2)
       
         [textField3 becomeFirstResponder];
       
       else if textField == textField3)
        
         [textField4 becomeFirstResponder]; 
           
       .
       .
       .

       [textField resignFirstResponder];

       return YES;
    

【讨论】:

【参考方案4】:

我认为这个解决方案更具动态性,因为它适用于任意数量的文本字段,只要您的超级视图没有带有标签 == lastTextField.tag + 1 的视图

在 viewDidLoad 中:

- (void)viewDidLoad

    [super viewDidLoad];

    self.textField1.delegate    = self;
    self.textField2.delegate    = self;
    ...
    self.lastTextField.delegate = self;

    self.textField1.tag    = 1;
    self.textField2.tag    = 2;
    ...
    self.lastTextField.tag = n;

然后实现textFieldDelegate:

-(BOOL) textFieldShouldReturn:(UITextField *)textField

    NSInteger nextTag = textField.tag + 1;
    UIResponder* nextResponder = [textField.superview viewWithTag:nextTag];

    if (nextResponder)
        [nextResponder becomeFirstResponder];
    else
        [textField resignFirstResponder];

    return NO;

【讨论】:

如果我想使用键盘上的返回按钮从文本字段传递到按钮?? 如下图:developer.apple.com/library/ios/documentation/uikit/reference/…,UIButton继承自UIResponder。没试过,但如果你最后一个标记的视图是 UIButton,它肯定可以工作。【参考方案5】:

你需要在.h声明

.m 设置

yourTextfieldRef1.delegate=self;
yourTextfieldRef2.delegate=self;
yourTextfieldRef3.delegate=self;
yourTextfieldRef4.delegate=self;
yourTextfieldRef5.delegate=self;
.
.
.

设置

yourTextFieldRef1.tag=1;
yourTextFieldRef2.tag=2;
yourTextFieldRef3.tag=3;
yourTextFieldRef4.tag=4;
yourTextFieldRef5.tag=5;
.
.
.


-(BOOL)textFieldShouldReturn:(UITextField*)textField;
    
        NSInteger nextTag = textField.tag + 1;
        // Try to find next responder
        UIResponder* nextResponder = [textField.superview viewWithTag:nextTag];
        if (nextResponder) 
            // Found next responder, so set it.
            [nextResponder becomeFirstResponder];
         else 
            // Not found, so remove keyboard.
            [textField resignFirstResponder];
        
        return YES;
    

希望对您有所帮助...!

【讨论】:

以上是关于使用苹果键盘中的返回按钮进行导航的主要内容,如果未能解决你的问题,请参考以下文章

突出显示 iOS 键盘上的“返回”按钮

苹果手机左上角按钮返回不刷新

如何使用Android中的导航控制器制作自定义后退按钮以返回某个目的地?

导航栏上没有后退按钮

使用导航按钮从 UITableView 中的选中元素返回数据

如何在 React Native 中的启动画面后禁用后退按钮