【问题标题】:Allowing user to only type in next available text field in Swift允许用户只在 Swift 中输入下一个可用的文本字段
【发布时间】:2017-01-08 22:12:11
【问题描述】:

这里是 Swift 和 xcode 的新手。我正在尝试使用 swift 中的 tableview 和 tableview 单元格制作一个简单的待办事项计划器。

我想知道是否有任何方法可以使当用户单击任何文本字段时,要响应的文本字段应该只是下一个可用的文本字段。

例如在这张照片中,如果用户点击第 10 个文本字段,应该打开的文本字段应该只是第 4 个,即“作业”单元格之后的那个。

这是一件简单的事情吗,还是我在这里太过分了?

感谢任何其他提示!

【问题讨论】:

  • 您确定要为您的用例设置多个文本字段吗?
  • 现在我只使用一个可以正常工作的文本字段,但我需要多个文本字段来实现这一点吗?

标签: ios swift uitableview uitextfield


【解决方案1】:

您可以尝试使用UITableViewdidSelectRowAtIndexPath。您将能够知道所选行的indexPath。我假设您有一个数据作为数组,用于加载tableView 的数据。在didSelectRowAtIndexPath 方法中,您可以简单地检查所选行的indexPath 和您的数据计数。如果它们匹配,则什么也不做,如果不匹配,您可以使用tableView.selectRowAtIndexPath(:_) 选择正确的单元格-根据您的示例,第四个-。我希望它会有所帮助。

【讨论】:

    【解决方案2】:

    如果只处理文本字段,您可以使用UITextFieldDelegate 中的textFieldShouldReturn

    func textFieldShouldReturn(textField: UITextField) -> Bool {
        if textField != lastTextField{
            self.lastTextField.becomeFirstResponder()
        }
        return true
    }
    

    或者对于带有自定义单元格的表格:

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        if indexPath.row != lastItemRow + 1{
            let cellToFocus = tableView.cellForRowAtIndexPath(indexPath)
            cellToFocus.textField.becomeFirstResponder()
        }
    }
    

    【讨论】:

    • lastTextField 和/或 lastItemRow 应该是什么?
    • @brownmamba lastTextField 引用视图中文本字段对象列表中的最后一个对象。从您提到的内容来看,您需要第二种方法:lastItemRow 指的是您获取的项目的最后一个索引。假设有 todoItems = [Foo](), lastItem = todoItems.count
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2018-03-06
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2019-02-04
    相关资源
    最近更新 更多