• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 谁应该管理 UI 元素、 View 或 View Controller ?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 04:09:22 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我目前正在开发一个 iOS 应用程序,我想知道如何管理 UI 元素。我正在使用 Storyboard 来放置我的 View 和 Autolayout 以使所有分辨率都独立。如果有帮助,这里有一些关于我是如何提出这个问题的背景信息。

一些背景

Button layout

我有代表钢琴键的按钮,稍后我在代码中添加了一个 subview ,在它们上绘制实际的键。我通过在 ViewController 上创建 @IBOutlets 并订阅 UIDeviceOrientationDidChangeNotification 来做到这一点。这调用了一个方法,该方法根据当前按钮 frames 添加 subview 以获取适当大小的键。

这在 iOS 8.1 中运行时运行良好,但如果我在 iOS 7 上运行该应用程序,则在我获得 时按钮的框架并未更新为新方向>UIDeviceOrientationDidChangeNotification,所以横向的一切都搞砸了。我做了一些研究( UIInterfaceOrientation not yet updated when UIDeviceOrientationDidChangeNotification caught in UIView ),似乎一个好的解决方案是覆盖 layoutSubviews 方法。问题是,layoutSubviews是一种 UIView 方法,我在 UIViewController 中管理我的按钮和 UI。

一时冲动,我想继承我的 UIView,重写 layoutSubviews 并从那里调用我的 Controller 上的一个方法来正确地将键添加到按钮,但这听起来不对。

问题

我的 UI 由 UIViewController 管理。但是我需要根据 UIView 的适当方法更新我的 View 。我假设,为了尊重 MVC 原则,我的观点现在不应该是关于我的 Controller 的事情,但这会带来一些问题:

  • 谁应该管理 UI?
  • 我的策略有错吗? UIView 将 @IBOutlets 保存在按钮上,以便以后可以 应用我需要的 subview ?
  • 如果您阅读了背景,您对这种特殊情况有什么建议吗?

我假设这个问题的复杂性相对较小,我不需要在 NSNotificationCenter 中设置通知,但我可能错了。我真的很想听听这不是唯一的解决方案。

提前致谢。我希望我已经足够清楚了,但是如果您想/需要关于我的具体情况的任何其他详细信息,请告诉我,我会很乐意详细说明。



Best Answer-推荐答案


如果我正确理解了这个问题,您的 ViewController 应该在其 View 中布置键。 viewDidLayoutSubviews 是一个很好但不是唯一的地方,您可以在 UIViewController 上覆盖该方法。

现在,如果您的 View 应该保持其内部布局。即如果您的按钮/键有任何 subview ,您应该更新 UIView 上的 layoutSubviews 中的那些。

这两种方法都将被调用以响应父 View 边界或中心的变化。

就旋转变化而言,在 iOS 8 中,您应该使用 viewWillTransitionToSize:withTransitionCoordinator:willTransitionToTraitCollection:withTransitionCoordinator: 取决于您的需要。

我强烈建议您编写独立于方向的布局。您应该只使用包含 View 的边界作为引用,并且在任何帧中从不硬编码。例如,也许您的一个键应该是其 super View 宽度的 1/56,而不是纵向和横向的神奇数字。

关于ios - 谁应该管理 UI 元素、 View 或 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27596052/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap