前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【iOS】如何在 NSViewController、NSView 中关闭当前 NSWindowController ?

【iOS】如何在 NSViewController、NSView 中关闭当前 NSWindowController ?

作者头像
圆号本昊
发布2021-12-30 17:25:28
9660
发布2021-12-30 17:25:28
举报
文章被收录于专栏:github@hornhuang

前言

一般来说,用户会通电点击 x 按钮来关闭

  • 但有些场景,比如登录页需要在登录成功时关闭,这是应该怎么办呢?

解决

网上一般会说这种方案:(不建议使用)

代码语言:javascript
复制
class BaseWindowController: NSWindowController {
    ...
    @objc func terminateWindow(notification: NSNotification) {
    	...
        NSApp.terminate(self)
    }
    ...
}
  • 使用 NSApp.terminate(self) 确实吧当前 WIndowController 关了,但是把其他的 WindowController 也关了
  • 用户登录成功 app 直接退出?不太合适。所以我有开始了探索

NSWindowController :: close()

我阅读了下 WindowController 的借口,发现其中有一个 close 方法,我们稍加替换,吧 NSApp 换成我们的 WindowController 本身看看效果

代码语言:javascript
复制
class BaseWindowController: NSWindowController {
    ...
    @objc func terminateWindow(notification: NSNotification) {
    	...
        close()
    }
    ...
}
  • 完美关闭登陆页~ 且其他页面照常运行~ 但这个的方法,前提是得获得当前 WIndowController 实例,所以得在单例中、ViewController 中或者做全局的 WindowController 管理?太麻烦了
  • 而且这个方法毕竟不是官方推荐的,就像手动调用 ViewController 的 layoutSubViews 一样,感觉不稳,所以我要找个稳妥的方法给大家

推荐 NSView :: window :: close

有没有一个办法,能直接在 view 上,把它的 WindowController 关了呢?我帮他家搜寻了一番,终于找到了正解

代码语言:javascript
复制
extension LoginViewController {
    @objc func onSucceed(notification: NSNotification) {
    	...
        NSView().window?.close()
        ...
    }
    
    @objc func onFailed(notification: NSNotification) {
        /// TODO:
    }
}
  • 直接对当前 View 所在 window 执行 close 方法就可以啦,系统会帮我们进行后续的操作
  • 注意这里要分 NSWindowControoler、NSViewController 和 NSView ,具体在使用分别帮大家总结一个吧

总结

  • 帮大家总结一下
  • NSWindowController :: 我们直接使用 self.window.close() 就可以啦
  • NSViewController :: 我们需要通过 self.view.window.close() 来关闭
  • NSView :: 我们直接使用 self.window.close() 就可以啦
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/09/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 解决
    • NSWindowController :: close()
      • 推荐 NSView :: window :: close
      • 总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档