[英]Swift delegate function not being called from protocol
我正在建立各种各样的图书馆。 一个屏幕是一个表视图控制器,其中包含书籍列表,另一个屏幕是一个视图控制器,您可以添加书籍。
我正在使用“添加书籍”类将书籍添加到书籍列表屏幕。 “添加书籍”屏幕包含允许用户输入书籍名称,作者,出版者等的文本输入。当用户在输入这些字段后单击按钮时,它将创建一个包含这些属性的书籍对象,并将用户定向到首页屏幕显示新书已添加到书列表中。 书籍列表是一个行表。 每行分别包含一本书。
我正在使用一种协议来调用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。
您需要将AddBookViewController的addBookDelegate设置为CurrentBooksTableViewController
在出现AddBookViewController之前,先在CurrentBooksTableViewController内部,您需要将addBookDelegate设置为self。
INSTANCE_OF_ AddBookViewController.addBookDelegate = self
然后,只有您可以从另一端访问addBookDelegate函数。 否则,如果您检查addBookDelegate将为= nil
您是否设置了addBookDelegate
的值? 您可以在表视图控制器中的“准备segue”功能中执行此操作。
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let addBookVC = segue.destination as? AddBookViewController {
addBookVC.addBookDelegate = self
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.