繁体   English   中英

Swift委托函数未从协议中调用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM