【问题标题】:How to add a TextField above the TableView of a TableViewController如何在 TableViewController 的 TableView 上方添加 TextField
【发布时间】:2021-05-21 20:07:48
【问题描述】:
我在 NavigationController 中嵌入了一个 TableViewController。该应用程序此时运行良好。但是现在我想在 TableView 上方添加一个 TextField:
Want a TextField added above the TableView
但我似乎无法从TableView 上方 的对象库中拖动TextField。它将它放到导航项上,但这不是我想要的。我尝试添加一个新的 ViewController,向其中添加一个 TextField,并尝试将 TableView 从我现有的 TableViewController 拖到它上面,但这是不可能的。通过采用现有 UI 元素并将其嵌入其他视图并仍保留现有功能来重新设计现有应用程序的正确方法是什么?
【问题讨论】:
标签:
ios
storyboard
ui-design
【解决方案1】:
通过将 UITextField 拖到那里,您正在尝试将两个视图添加到 UITableViewController 或 UIViewController。 UIViewController(或UITableViewController)只有一个视图,然后该视图可以有多个子视图。所以这可能就是为什么拖放不起作用的原因,你基本上是在尝试直接向视图控制器添加多个视图,而不是添加 UIView 的子视图。
但是您可能不想将UITextField 嵌入到您的表格视图的任意子视图中,即使理论上这是可能的。在这种情况下,它可能会漂浮在某处或出现在屏幕中间。
您可能想要做的是将 UITextField 嵌入表格视图单元格 (UITableViewCell),以便您可以在该表格视图单元格中输入一些文本。
有一些教程和其他 answers on StackOverflow 关于如何将 UITextField 嵌入到表格视图单元格中。
【解决方案2】:
我没有试图弄乱 StoryBoard 中的对象,而是这样做了:
-
删除了情节提要中的所有对象。所以基本上我把 TableViewController 扔掉了。
-
添加了一个普通的 ViewController。
-
在 ViewController 的顶部添加了 TextField。
-
在 TextField 下方的 ViewController 中添加了 TableView。
-
排列和添加的约束。
-
更改了现有的 ViewController.swift 类头:
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate {
-
Ctrl 并从 TableView 中拖动一个 IBOutlet:
@IBOutlet weak var tblView: UITableView!
因此,通过这样做,我可以将大部分代码保留在 ViewController.swift 中。
-
设置委托和数据源:
tblView.delegate = self
tblView.dataSource = self
textField.delegate = self
-
遵守 TableViewDelegate 协议的方法现在会丢失override 说明符,例如:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}