代码之家  ›  专栏  ›  技术社区  ›  Ian

导航UI未使用Xcode 9更新

  •  0
  • Ian  · 技术社区  · 7 年前

    当我从服务器下载完数据模型后,我试图更新我的navigationItem标题视图。

    类似这样:

    private func loadNews() {
        self.newsModelManager.sendRequest(inBackground: false, preSendHandler: { (isReachable) in
            if isReachable {
    
            } else {
                appDelegate.showInternetFailedAlertView()
            }
        }, successHandler: { (response) in
            print("loadNewsModel: successHandler")
        }, errorHandler: { (response) in
            print("loadNewsModel: errorHandler")
        }, reloginFailHandler: { (response) in
            appDelegate.showReloginFailedAlertView()
        }) { (isReachable) in
            let array = self.newsModelManager.loadFirstFiveNews()!
            DispatchQueue.main.async {
                self.setupTitle_ViewWith(array: array)
            }
        }
    }
    

    在seupTitle_ViewWith中(数组:)

    func setupTitle_ViewWith(array: [NewsModel]?) {
        guard array != nil else { return }
        let frame = CGRect(x: 0, y: 0, width: 200, height: 40)
        let newsTitle_View = NewsTitleView(newsModelArray: array!, frame: frame)
        newsTitle_View.newsTitleViewDelegate = self
        self.title_View = newsTitle_View
    }
    

    self.title_View = newsTitle_View

    我想这会将我的标题视图更新到我的CustomView, 那里可能出了什么问题?

    我首先用realm从服务器保存模型,并在 let array = self.newsModelManager.loadFirstFiveNews()!

    2 回复  |  直到 7 年前
        1
  •  1
  •   Bharath    7 年前

    您好,这里是解决这个问题的简要总结,供其他可能面临类似问题的人参考,


    https://stackoverflow.com/a/20923010/4510873 )


    因此,我们尝试从viewController更新标题视图,它解决了我们的问题。

        2
  •  1
  •   Bishan    7 年前

    我认为你可以通过使用本地通知来解决这个问题,

    private func loadNews() {
        self.newsModelManager.sendRequest(inBackground: false, preSendHandler: { (isReachable) in
            if isReachable {
    
            } else {
                appDelegate.showInternetFailedAlertView()
            }
        }, successHandler: { (response) in
            print("loadNewsModel: successHandler")
        }, errorHandler: { (response) in
            print("loadNewsModel: errorHandler")
        }, reloginFailHandler: { (response) in
            appDelegate.showReloginFailedAlertView()
        }) { (isReachable) in
            let array = self.newsModelManager.loadFirstFiveNews()!
            DispatchQueue.main.async {
                NSNotificationCenter.defaultCenter().postNotificationName("refresh", object:array)
            }
        }
    }
    

    2) 然后在ViewController中,将其粘贴到viewDidLoad中

    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.setupTitle_ViewWith), name: "refresh", object: array)
    

    func setupTitle_ViewWith(notification: NSNotification){
        let array = notification.object as! NSArray
        guard array != nil else { return }
        let frame = CGRect(x: 0, y: 0, width: 200, height: 40)
        let newsTitle_View = NewsTitleView(newsModelArray: array!, frame: frame)
        newsTitle_View.newsTitleViewDelegate = self
        self.title_View = newsTitle_View
    }