我正在制作各种各样的图书馆。一个屏幕,一个表格视图控制器,包含一个书籍列表,另一个屏幕,一个视图控制器,允许您添加书籍。
我正在使用Add Book类将书籍添加到书籍列表屏幕。添加书籍屏幕包含文本输入,以允许用户输入书籍的名称,作者,出版商等。当用户在输入这些字段后单击按钮时,它会创建包含这些属性的书籍对象,并将用户定向回家屏幕显示新书已添加到书籍列表中。书籍列表是一个行表。每行分别包含一本书。
我正在使用一个协议来调用books类列表中的委托函数,但是它没有调用这个函数。未调用的函数是newBook。我的代码对我来说似乎很好,但是没有调用newBook委托函数。请帮忙!。我在下面添加了相关代码:
添加图书课程:
import UIKit
protocol AddBookProtocol {
func newBook(book: Book)
}
class AddBookViewController: UIViewController {
var addBookDelegate: AddBookProtocol?
@IBOutlet weak var authorField: UITextField!
@IBOutlet weak var genreField: UITextField!
@IBOutlet weak var editionField: UITextField!
@IBOutlet weak var isbnField: UITextField!
@IBOutlet weak var nameField: UITextField!
@IBOutlet weak var dateField: UITextField!
@IBOutlet weak var publisherField: UITextField!
@IBOutlet weak var descriptionField: UITextField!
@IBAction func saveButton() {
print("HAHHHAHAHAH")
let name = nameField.text
let isbn = isbnField.text
let author = authorField.text
let publisher = publisherField.text
let publishDate = dateField.text
let genre = genreField.text
let edition = editionField.text
let desc = descriptionField.text
let book = Book(title: name!, isbn: isbn!, author: author!, publishDate: publishDate!, genre: genre!, publisher: publisher!, edition: edition!, desc: desc!)
addBookDelegate?.newBook(book: book)
navigationController?.popViewController(animated: true)
}
//rest of the code
班级显示当前书籍列表:
class CurrentBooksTableViewController: UITableViewController, AddBookProtocol {
var BooksList: [Book] = []
func newBook(book: Book) {
BooksList.append(book)
tableView.beginUpdates()
tableView.insertRows(at: [IndexPath(row: BooksList.count - 1, section: 0)], with: .automatic)
tableView.endUpdates()
tableView.reloadSections([SECTION_COUNT], with: .automatic)
}
//rest of the code
}
因为某些原因没有调用newBook。
答案 0 :(得分:1)
您需要将AddBookViewController的addBookDelegate设置为CurrentBooksTableViewController
在呈现AddBookViewController之前,在CurrentBooksTableViewController中,您需要将addBookDelegate设置为self。
INSTANCE_OF_ AddBookViewController.addBookDelegate = self
然后只能从另一端访问addBookDelegate函数。否则,如果你检查addBookDelegate将是= nil
答案 1 :(得分:1)
您是否设置了addBookDelegate
的值?您可以在表视图控制器中准备segue函数中执行此操作。
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let addBookVC = segue.destination as? AddBookViewController {
addBookVC.addBookDelegate = self
}
}