swift - tableView发现零时,展开
我有2 UIViewController
:MainViewController
- >CreateNewViewController
。swift - tableView发现零时,展开
tableView
包含在MainViewController
中。我已将tableView
的dataSource
和delegate
连接到MainViewController
。我还将一个插座连接到MainViewController
。在MainViewController
override func viewDidLoad() {
super.viewDidLoad()
_ = MainViewController.init(nibName: nil, bundle: nil, createNewViewController: self)
// Do any additional setup after loading the view.
}
初始化将初始化委托财产:
在CreateNewViewController
,我想有这样的
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, createNewViewController : CreateNewViewController) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
createNewViewController.createNewCallBack = self
}
我试图更新tableView
与协议FUNC。我不明白为什么tableView
从CreateNewViewController
回来时会是nil
。这是回调函数:
func addNewBook(book: Book) {
self.books.append(book)
self.tableView.reloadData()
}
任何帮助将不胜感激!
根据你的描述,你有一个从MainVC到CreateNewVC的继续。
在CreateNewVC的viewDidLoad
中,您似乎试图将CreateNewVC的委托设置为MainVC。但是,这不是正确的方法。
你应该这样做之前提出CreateNewVC
,在MainVC的prepareForSegue
方法。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? CreateNewViewController {
vc.createNewCallback = self
}
}
谢谢!我对swift很陌生,你的回答肯定会帮助我在将来使用prepare segue初始化财产 – Jeff
您试图在错误的地方设置委托。 根据有关准备方法的文档:
此方法的默认实现什么也不做。子类 将覆盖此方法,并在显示之前使用它来配置新视图控制器 。 segue对象包含关于转换的信息 ,包括对涉及的两个视图控制器 的引用。
你要实现此方法:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let myViewController = segue.destination as? CreateNewViewController {
myViewController.createNewCallback = self //this set the delegate
}
}
您使用的是故事板? – Sweeper
是的,我用故事板为 – Jeff
我正在使用segue从主要CreateNew – Jeff