iOS:在文本字段之间自动切换

Posted

技术标签:

【中文标题】iOS:在文本字段之间自动切换【英文标题】:iOS: automatic way to tab between text fields 【发布时间】:2013-06-30 13:17:12 【问题描述】:

我有一个比较大的 iPhone 应用程序,有很多视图。 我想在我的键盘上实现下一个/上一个选项。 我已经设法在 UI 方面实现了它,我在网上看到了一些代码示例,但所有这些示例都假设我们需要向每个视图控制器添加代码以实现文本字段之间的实际转换。

我的问题是:有没有一种通用的方法可以知道,给定一些文本字段,按顺序排列的下一个字段是谁? (即不重构我的每个视图控制器)

我问这个问题是因为当我使用 iPhone 模拟器并按下计算机的 Tab 键时 - 会发生字段之间的切换,所以我想知道是否有内置或通用的方式在 ios 上实现它。

说明: 有没有一种方法可以在不为每种类型的视图控制器添加特定代码的情况下做到这一点? (可以添加通用代码)

【问题讨论】:

没有。如果不添加代码逻辑来在字段之间导航,就没有办法做到这一点。 您应该将其作为答案,而不是评论。评论仅用于澄清。 我会澄清一下:有没有办法在不为每种类型的视图控制器添加特定代码的情况下做到这一点? (添加通用代码就可以了) 这有一些解决方案,一个不需要标记UItextfields ***.com/questions/1347779/… 【参考方案1】:

我想写下我是如何解决这个问题的,这里有很多很好的答案:)

首先,我无法创建完全通用的代码来创建选项卡,而不管它在哪个视图中。 相反,我创建了这个东西,我认为这是最通用的解决方案,但 firstResponder 方法不起作用:

我使用下一个/上一个/完成按钮和适当的操作委托创建了自定义工具栏。 我通过添加类别“Tab”扩展了 UIViewController。该类别声明了一个 fieldsArray 并实现了委托方法。 现在每个特定的视图控制器需要做的(除了导入类别之外)是根据它的属性提供这个 fieldsArray 并调用将按钮工具栏添加到这个字段的 init 方法

我希望你能从中受益,再次感谢所有好的答案

【讨论】:

【参考方案2】:

您可以在实用程序类中拥有一个方法,该方法将文本字段和视图控制器作为参数。然后您可以使用文本字段的“标签”属性来查找该 viewcotroller 中的下一个文本字段,假设您相应地分配了标签。数字会很棒,我想。 vc 中的一个简单回调方法可以处理焦点更改。这就是我现在所看到的一般性。

【讨论】:

感谢您的回答。但是使用 tag 属性是我试图避免的事情之一,因为我的大多数表都是即时构建的,并且将所有内容都添加到标记顺序是一个有点混乱的过程。 @Eliktz - 标签只是一个建议。您可以以任何您喜欢的方式确定下一个字段,机制保持不变。 (例如,您可以使用 x-y 坐标来查找下一个字段?)【参考方案3】:

这是我想出的一些通用代码:

// add a property for the fieldsArray

//add this in viewDidLoad
_fieldsArray = [[NSMutableArray alloc] init];
NSArray *viewsArray = [self.view subviews];
for (id view in viewsArray) 
    if ([view isKindOfClass:NSClassFromString(@"UITextField")]) 
        [_fieldsArray addObject:view];
    


//add this in your action that switches the fields
for (UITextField *field in _fieldsArray) 
    if ([field isFirstResponder]) 
        if ([fieldsArray lastObject] == field) 
            [_fieldsArray[0] becomeFirstResponder];
        else 
            NSUInteger nextIndex = [_fieldsArray indexOfObject:field] + 1;
            [_fieldsArray[nextIndex] becomeFirstResponder];
        
        break;
    

在使用之前应该对其进行改进。

1) 递归查找self.view的所有子视图

2) 检查数组是否为空或 nil 或其中只有一个对象。

祝你好运!

【讨论】:

以上是关于iOS:在文本字段之间自动切换的主要内容,如果未能解决你的问题,请参考以下文章

自动保存标签中的信息并在 iOS 中切换

在 Swift 中按下返回键时在文本字段之间切换

iOS 14让AirPods更智能:自动化切换设备

文本字段内切换按钮的 IOS UI 测试用例

使用 CSS 在显示普通文本字段和输入之间进行切换

在 Actionscript 中仅接受数字的 2 个文本字段之间切换启用/禁用