模拟Tab键在iOS SDK中按

时间:2010-10-15 18:07:11

标签: iphone keyboard ios4

当iOS使用硬件键盘时,按Tab键或shift-tab会分别自动导航到下一个或上一个逻辑响应器。有没有办法以编程方式执行相同操作(即模拟Tab键而不是手动跟踪逻辑顺序)?

3 个答案:

答案 0 :(得分:9)

由于 William Niu 是对的,但您也可以使用下面介绍的代码。

我已经使用过这个并获得了成功。现在考虑UITextField的例子......

您可以使用UITextView的委托方法-(BOOL)textFieldShouldReturn:(UITextField*)textField,如下所述。

但是在执行此操作之前,您必须以递增顺序为每个UITextField提供标记...(不需要递增顺序,但是对于我的代码它是必需的,您也可以使用递减顺序但是一些代码更改这样做)

- (BOOL)textFieldShouldReturn:(UITextField *)textField {

    NSInteger nextTag = textField.tag + 1;
    UIResponder* nextResponder = [self.view viewWithTag:nextTag];   
    if (nextResponder) {
        [nextResponder becomeFirstResponder];       
    } else {
        [textField resignFirstResponder];
    }
    return YES;
}

希望这对你有用......

快乐的编码......

答案 1 :(得分:4)

您可以使用tag属性定义“tab-order”。以下文章介绍了如何查找要转到UITextField s的下一个标记索引, How to navigate through textfields (Next / Done Buttons)

以下是该帖子的修改版代码。以下代码将尝试循环回到第一个标记索引,而不是在最后一个标记索引处删除键盘。

-(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];

    return NO;
  }

  // Try to find the first responder instead...
  // Assuming the first tag index is 1
  UIResponder* firstResponder = [textField.superview viewWithTag:1];
  if (firstResponder) {
    // loop back to the first responder
    [firstResponder becomeFirstResponder];
  } else {
    // Not found, so remove keyboard.
    [textField resignFirstResponder];
  }

  return NO; // We do not want UITextField to insert line-breaks.
}

如果你想要一个除UITextField以外的UI元素,你仍然应该能够使用相同的逻辑,并进行更多检查。

答案 2 :(得分:0)

不确定这是否有帮助,但在UITextFields的上下文中,如果实现UITextFieldDelegate,则在按下软键盘的返回键时将调用- (BOOL)textFieldShouldReturn:(UITextField *)textField

我试图直接点击我的笔记本电脑键盘,它似乎按照你将它们添加到视图中的顺序在所有文本字段之间跳转,但没有转到任何其他类型的字段(按钮)等)。

键盘上的

键模拟了模拟器软键盘上的按键,按预期工作。