首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导航UI不使用Xcode 9更新

导航UI不使用Xcode 9更新
EN

Stack Overflow用户
提问于 2017-09-30 06:40:27
回答 2查看 190关注 0票数 0

当我完成从服务器下载数据模型时,我尝试更新我的navigationItem titleView。

就像这样:

代码语言:javascript
复制
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中(数组:)

代码语言:javascript
复制
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

我以为这会把我的titleView更新成我的CustomView,但它不是.哪里可能出了什么问题?

我首先使用领域从服务器上保存模型,然后在let array = self.newsModelManager.loadFirstFiveNews()!上读取

但是,如果我已经有了设备中的数据,并且不需要先加载就直接读取,那么它完全可以正常工作.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-30 07:37:27

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

@Ian在这个问题中共享的代码已经添加到NavigationController子类中。

问题就在这里引起的。因为您无法从导航控制器更新导航标题或titleView,因此请参阅此答案(https://stackoverflow.com/a/20923010/4510873)。

因此,我们尝试从titleView更新viewController,然后它解决了我们的问题。

票数 1
EN

Stack Overflow用户

发布于 2017-09-30 07:23:35

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

1)像这样改变loadNews函数,

代码语言:javascript
复制
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中

代码语言:javascript
复制
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.setupTitle_ViewWith), name: "refresh", object: array)

3)

代码语言:javascript
复制
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
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46500261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档