用户与文本字段快速互动的最佳方式4

时间:2019-05-23 00:45:41

标签: ios swift uitextfield

在我构建一种表单时,用户将能够通过文本字段输入信息。

我想知道是否有一种简单的方法通过滚动使该表单更具交互性。

我知道有些人使用滚动视图,但是使用“收藏夹”视图或表格视图并在单元格中插入文本字段也是常见的做法吗?怎么样?

您个人使用哪种方式以及如何使用?

(请注意,我是通过编程方式完成所有这些操作,而不使用界面生成器)

这是我要构建的表单的屏幕截图:

Form I want to build

谢谢

3 个答案:

答案 0 :(得分:0)

我强烈建议使用Eureka,您可以在数分钟内制作Swift制作的表单。

enter image description here

创建表单

  1. Import Eureka
  2. 创建从UIViewController继承的新FormViewController
  3. ...开始在ViewDidLoad

    中添加行
    import Eureka
    
    class MyFormViewController: FormViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        form +++ Section("Section1")
            <<< TextRow(){ row in
                row.title = "Text Row"
                row.placeholder = "Enter text here"
            }
            <<< PhoneRow(){
                $0.title = "Phone Row"
                $0.placeholder = "And numbers here"
            }
        +++ Section("Section2")
            <<< DateRow(){
                $0.title = "Date Row"
                $0.value = Date(timeIntervalSinceReferenceDate: 0)
            }
    }
    }
    

您可以在github上找到更多信息。 也可以创建自定义单元格或替代Eureka单元格样式。

答案 1 :(得分:0)

IQKeyboardManager是我在每个项目中使用的最好的软件,我强烈建议您使用简单准确的解决方案。IQKeyboardManager

答案 2 :(得分:0)

请尝试使用Apple提供的API,而不要使用第三方库。

对此可以有多种解决方案,

  1. 使用UIScrollViewUIStackView的组合。在这种情况下,您需要手动创建所有表单字段的用户界面(即使用户界面完全相同)

  2. 使用UITableView通过单个UI创建所需的字段。

您要创建的表单包含3个具有相同UI的字段-仅文本不同。

由于UITableView适用于reusability的概念,并且我们的表单包含相同类型的内容,因此我们绝对可以使用UITableView。即使表单也包含其他内容类型,在这种情况下,tableView也是一个不错的选择。

1。。首先创建一个enum - FormField,它将代表表单中单个字段的类型。

enum FormField {
    case websiteName
    case websiteLink
    case password

    var title: String? {
        var str: String?
        switch self {
        case .websiteName:
            str = "Website's name"
        case .websiteLink:
            str = "Link"
        case .password:
            str = "Password"
        }
        return str
    }

    var placeholder: String? {
        var str: String?
        switch self {
        case .websiteName:
            str = "ex: \"Facebook\""
        case .websiteLink:
            str = "ex: \"www.facebook.com\""
        case .password:
            str = "current password"
        }
        return str
    }
}

我们将使用此enum填充自定义UITableViewCell。您可以根据需要添加更多字段类型。

2。。创建自定义UITableViewCell

class CustomCell: UITableViewCell {
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var textField: UITextField!

    func configure(with field: FormField) {
        self.label.text = field.title
        self.textField.placeholder = field.placeholder
    }
}

3。。将ViewController转换为UITableViewDataSource并实现方法

class ViewController: UIViewController, UITableViewDataSource {
    let formFields: [FormField] = [.websiteName, .websiteLink, .password]

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.formFields.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomCell
        cell.configure(with: self.formFields[indexPath.row])
        return cell
    }
}

在上面的代码中,我们创建了一个formFields数组,将其用作dataSourcetableView。根据需要添加更多内容。

enter image description here