Я создал экземпляр UITableViewController
, и у меня есть некоторые данные из Firebase, отображаемые в ячейках; нет проблем там. Но я хотел бы добавить текстовое поле (для комментариев) и кнопку (для публикации этого комментария) внизу UITableViewController
(и НЕ UITableView
). Причина, по которой я выбрал 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 и текстовым полем с кнопкой, которая будет размещена в нижней части экрана телефона.
EDIT:
это код, если я пытаюсь с 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)
}