当我正在构建一种表单时,用户将能够通过文本字段输入信息。
我想知道是否有一种简单的方法可以让这个表单更具交互性,让它可以滚动。。
我知道有些人使用滚动视图,但是使用Collection视图或表视图并在单元格中插入textfields也是一种常见的做法吗?怎么做?
你个人使用哪种方式?如何使用?
(请注意,我所有这些都是以编程方式完成的,而不使用接口生成器)
下面是我想要构建的表单的截图:
谢谢
发布于 2019-05-23 01:49:26
I强烈建议使用 尤里卡,您可以在几分钟内完成Swift精心编制的表单.

创建窗体
Import EurekaUIViewController继承的新FormViewControllerViewDidLoad中添加行
导入Eureka类MyFormViewController: FormViewController { override (){ super.viewDidLoad() form +++节(“Section1”) <<< TextRow(){ row in row.title = "Text Row“row.placeholder =”输入text here“}} <<< PhoneRow(){ $0.title = "Phone Row”$0.占位符=“和数字在这里”} +++节(“Section2”) <<< DateRow(){ $0.title = "Date Row“$0.value = Date(timeIntervalSinceReferenceDate: 0) }}您可以找到更多关于github的信息。创建自定义单元格或重写Eureka单元格样式也是可能的。
发布于 2019-05-23 04:44:43
IQKeyboardManager是我在每个项目中使用的最好的解决方案,我强烈建议您使用简单而准确的解决方案。
发布于 2019-05-23 06:12:44
不要使用第三方库,而是尝试使用Apple已经提供的API。
可以有多种解决方案,
UIScrollView和UIStackView的组合。在这种情况下,您需要手动创建所有表单字段的UI (即使UI完全相同)。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数组,我们将使用它作为dataSource到tableView。根据您的要求添加更多内容。

https://stackoverflow.com/questions/56266712
复制相似问题