【问题标题】:Master view not updating with delegate from detail view主视图未与详细视图中的委托一起更新
【发布时间】:2017-07-31 01:54:33
【问题描述】:

当用户点击详细视图中的 UIBarButtonItem(代表收藏按钮)时,我正在尝试更新 UISplitView 中的主视图。由于某种原因,委托方法永远不会被调用。相关代码如下。有什么建议吗?

import UIKit
import WebKit

protocol FavouriteCaseDelegate: class {
func updateMasterForFavouriteStatusChange(caseID: Int, favouriteStatus: Bool)
}

class DetailViewController: UIViewController, UITableViewDelegate, UITableViewDataSource

weak var favouriteDelegate: FavouriteCaseDelegate? = nil

override func viewDidLoad() {
    super.viewDidLoad()

    //Configure favourite bar button
    favouriteButton = UIButton.init(type: .custom)
    if caseFavourited == false {
        favouriteButton.setImage(UIImage(named: "FavouriteIcon"), for: UIControlState.normal)
    } else {
        favouriteButton.setImage(UIImage(named: "FavouriteIconSelected"), for: UIControlState.normal)
    }
    favouriteButton.addTarget(self, action:#selector(didTapFavouriteBarButton), for: UIControlEvents.touchUpInside)
    favouriteButton.frame = CGRect.init(x: 0, y: 0, width: 30, height: 30)
    let favouriteBarButton = UIBarButtonItem.init(customView: favouriteButton)
    self.navigationItem.rightBarButtonItem = favouriteBarButton
}

func didTapFavouriteBarButton() {
    caseFavourited = !caseFavourited

    CaseManager.caseWorker.changeFavouritedStateForCase(subjectID: subjectID, caseID: caseID, isFavourited: caseFavourited)

    favouriteDelegate?.updateMasterForFavouriteStatusChange(caseID: caseID, favouriteStatus: caseFavourited)
}

import UIKit

class MasterTableViewController: UITableViewController, FavouriteCaseDelegate {

func updateMasterForFavouriteStatusChange(caseID: Int, favouriteStatus: Bool) {
    print("updateMasterForFavourite called")
    self.tableView.reloadData()

    }
}

【问题讨论】:

  • 你在mastertableviewcontroller中设置detailviewcontroller.delegete = self了吗?
  • 尝试在实例化或执行 segue to detail 视图控制器时将 masterViewController 设置为委托。
  • 啊哈——搞定了!非常感谢!

标签: ios swift


【解决方案1】:

MasterTableViewController 类中,您需要设置 DetailViewController-> favouriteDelegate to self 例如:-

//Assuming you have reference of detailViewController inside your MasterTableViewController class
let detailViewController =  DetailViewController()
detailViewController.favouriteDelegate = self

一旦设置了委托并调用了方法,那么它应该被调用。

【讨论】:

  • 我现在已经添加了,但不幸的是该方法仍然没有被调用。
  • 你在哪里添加的?
  • 主视图的viewDidLoad
  • 当您在 updateMasterForFavouriteStatusChange 中打印 favouriteDelegate 时得到什么值??
  • 好吧,我不确定,因为该方法永远不会被调用。 didTapFavouriteBarButton() 中的其余代码运行但不是委托方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
相关资源
最近更新 更多