Извлечение данных из базы данных в ячейку пользовательского табличного представления - PullRequest
0 голосов
/ 11 октября 2018

Я работаю над приложением ios.У меня есть пользовательская ячейка таблицы, в которой определены мои параметры.У меня также есть две метки в моей ячейке прототипа (имя и автор).Я хочу, чтобы строковые значения для имени и автора считывались из базы данных в метки для массива.

Однако я застрял на том, как добавить строковые значения из firebase в эти метки.Пожалуйста, помогите.

class ViewController: UIViewController, UITableViewDelegate,
UITableViewDataSource{
    var ref:DatabaseReference!
    var books = [Books]()
  @IBOutlet weak var mainTableView: UITableView!
    override func viewWillAppear(_ animated: Bool) {
        mainTableView.reloadData()
        super.viewWillAppear(animated)
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        mainTableView.rowHeight = 120
        // Do any additional setup after loading the view, typically from a nib.
        //Set the firebase reference
        Database.database().reference()
        //retrieve the posts and listen for changes
        ref?.child("Books").observe(.childAdded, with: {(snapshot) in
            let post = snapshot.value as? String
             if let actualPost = post {
        self.post.append(actualPost)
            self.mainTableView.reloadData()
}
        })
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return books.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let bookCell = tableView.dequeueReusableCell(withIdentifier: "BookCell", for: indexPath) as! CustomTableViewCell
        let idx:Int = indexPath.row
        bookCell.bookName?.text = books[idx].name
        bookCell.bookAuthor?.text = books[idx].author
        return bookCell
    }

1 Ответ

0 голосов
/ 11 октября 2018

Оптимальный способ сделать это - определить Class для вашего типа.Я понимаю, что вы представляете книги, написанные автором, и имена авторов:

Class Book {

 var booksWritten:[Array]?
 var authorsName:String?

 init(booksFromFB:[Array], nameFromFB:String) {
 self.booksWritten = booksFromFB
 self.authorsName = nameFromFB
 }
}

В вашем ViewController, где вы вызываете Firebase, вы объявляете переменную, которая является массивом Book s.

var books = [Books]()

Когда вы возвращаете снимок из Firebase, вы инициализируете переменную типа Book со свойствами этой записи:

var ref: DatabaseReference!
ref = Database.database().reference()
ref?.child("Books").observe(DataEventType.value, with: { (snapshot) in
guard let snapshot = snapshot.children.allObjects as? [DataSnapshot] else { return }
for book in snapshot {
      let books = book.childSnapshot(forPath: "Books").value as? [String]
      let author = book.childSnapshot(forPath: "Author").value as? String

 let book = Book(booksFromFB: books, authorFromFB: author)
 books.append(book)
}
        self.mainTableView.reloadData()

}) { (error) in
print(error.localizedDescription)
}

Для вашей ячейки я бы создал Class.(Не забудьте установить его идентификатор в раскадровке)

class BooksTableViewCell: UITableViewCell {
@IBOutlet weak var books: UILabel!
@IBOutlet weak var author: UILabel!

  func configureCell(books:Array, author:String){
    self.books.flatMap({$0}).joined() = books
    self.author.text=author
  }
}

Последний шаг:

func tableView(_ tableView:UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {        
    guard let cell = mainTableView.dequeueReusableCell(withIdentifier: "BooksTableViewCell") as? BooksTableViewCell else { return UITableViewCell() }

    let book = books[indexPath.row]
    cell.configureCell(books: book.booksWritten, author: book.authorsName)

    return cell
}

PS: не забудьте удалить каких-либо наблюдателей, когда они вам больше не нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...