【发布时间】:2019-11-19 01:39:34
【问题描述】:
我创建了一个UITableViewController 的实例,并且我有一些来自 Firebase 的数据显示在单元格中;那里没问题。但我想在UITableViewController(而不是UITableView)的底部添加一个文本字段(用于 cmets)和一个按钮(用于发布该评论)。我选择UITableViewController 而不是UIViewController 然后添加UITableView 的原因是因为如果我这样做,数据将不会显示在我的单元格中。所以,我想知道如何在UITableViewController 的底部编辑/或添加元素。
我尝试以编程方式添加文本字段和按钮,但它不起作用,如果我向 UIViewController 添加表格视图,我只是无法从 Firebase 中正确显示数据。
func setupInputComponents() {
//x,y,w,h
let containerView = UIView()
containerView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(containerView)
containerView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
containerView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive=true
containerView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
containerView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive=true
containerView.heightAnchor.constraint(equalToConstant: 50).isActive=true
//x,y,w,h
let sendButton = UIButton(type: .system)
sendButton.setTitle("Post", for: .normal)
sendButton.translatesAutoresizingMaskIntoConstraints = false
//klici funkcijo za gumb
sendButton.addTarget(self, action: #selector(handlePost), for: .touchUpInside)
containerView.addSubview(sendButton)
sendButton.rightAnchor.constraint(equalTo: containerView.rightAnchor).isActive = true
sendButton.centerYAnchor.constraint(equalTo: containerView.centerYAnchor).isActive = true
sendButton.widthAnchor.constraint(equalToConstant: 80).isActive = true
sendButton.heightAnchor.constraint(equalTo: containerView.heightAnchor).isActive = true
//x,y,w,h
containerView.addSubview(commentInputTextField)
commentInputTextField.leftAnchor.constraint(equalTo: containerView.leftAnchor, constant: 8).isActive = true
commentInputTextField.centerYAnchor.constraint(equalTo: containerView.centerYAnchor).isActive = true
commentInputTextField.rightAnchor.constraint(equalTo: sendButton.leftAnchor).isActive = true
commentInputTextField.heightAnchor.constraint(equalTo: containerView.heightAnchor).isActive = true
}
我希望表格视图中填充来自 Firebase 的数据 (cmets),并在手机屏幕底部放置带有按钮的文本字段。
编辑: 如果我尝试使用 UIViewController 和 tableView,这是代码:
import UIKit
import Firebase
class CommentDoOrDieViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return messages.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "commentTableCell", for: indexPath) as? CommentsTableViewCell else {fatalError("error")}
let message = messages[indexPath.row]
cell.komentLabela?.text = message.msg
return cell
}
override func viewDidLoad() {
super.viewDidLoad()
tabela.dataSource = self
tabela.delegate = self
showComments()
}
struct Message {
var msg: String?
var id: String?
}
var messages = [Message]()
var productId = ""
var productName = ""
@IBOutlet weak var tabela: UITableView!
func showComments(){
let ref = Database.database().reference().child("productComments").child(productId)
ref.observe(.childAdded, with: { (snapshot) in
print(snapshot)
if let slovar = snapshot.value as? [String:AnyObject] {
var a = Message()
a.msg = slovar["comment"] as? String
a.id = slovar["userId"] as? String
self.messages.append(a)
DispatchQueue.main.async {
self.tabela.reloadData()
}
}
}, withCancel: nil)
}
【问题讨论】:
-
UIViewController将是一个更好的选择,以防您想在控制器视图中拥有除 tableView 之外的任何其他内容。 -
我认为你不能在
UITableViewController的底部添加粘性视图(或按钮等)。您应该使用UIViewController并创建UITableView。 -
我看不出为什么
UIViewController中的UITableView不能在UITableViewController中工作,而且你最好使用前者。也许您可以详细说明尝试使用UIViewController时发生的情况。
标签: ios swift firebase uitableview uiviewcontroller