在我构建一种表单时,用户将能够通过文本字段输入信息。
我想知道是否有一种简单的方法通过滚动使该表单更具交互性。
我知道有些人使用滚动视图,但是使用“收藏夹”视图或表格视图并在单元格中插入文本字段也是常见的做法吗?怎么样?
您个人使用哪种方式以及如何使用?
(请注意,我是通过编程方式完成所有这些操作,而不使用界面生成器)
这是我要构建的表单的屏幕截图:
谢谢
答案 0 :(得分:0)
我强烈建议使用Eureka,您可以在数分钟内制作Swift制作的表单。
创建表单
Import Eureka
UIViewController
继承的新FormViewController
...开始在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,而不要使用第三方库。
对此可以有多种解决方案,
使用UIScrollView
和UIStackView
的组合。在这种情况下,您需要手动创建所有表单字段的用户界面(即使用户界面完全相同)
使用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
。根据需要添加更多内容。