首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OOP -使用UIView来协调多个子视图?

OOP -使用UIView来协调多个子视图?
EN

Stack Overflow用户
提问于 2013-03-25 06:30:13
回答 2查看 156关注 0票数 1

这是一个面向对象的编程问题:

因此,我正在尝试构建一个显示散点图的UIView类。在我当前的实现中,我已经创建了一个数据源协议,它允许chartView请求绘制其数据所需的所有信息。

现在,当有人初始化chartView并给它一个数据源时,图表视图创建/管理几个子视图:一个显示所有数据点的'dotsView‘,一个添加了点视图的滚动视图(因此它是可滚动的),以及一个位于后台并显示其他图表数据(如网格线)的'skeletonView’。

这个系统一开始运行得很好,然而,我决定我想要对点进行动画更改,所以我开始考虑使用collectionView来代替放置在滚动视图中的'dotsView‘,因为它会为我处理动画。然而,由于集合视图需要委托、数据源、布局对象等,突然之间,我的chartView看起来越来越像一个控制器而不是视图。

现在我的问题是:允许一个UIView协调/配置其他UIViews,即使这些UIViews是整体的基本需求,这是错误的方法吗?一方面,我希望保持chartView公共接口的简单性(初始化视图,给它一个数据源,然后就完成了)。另一方面,这个chartView实际上不再是一个视图,它更像是一个控制器。但我不希望我的图表的使用者将其视为控制器,我希望他们将其用作视图。

有什么想法吗?我很想听听别人的见解。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-25 10:47:13

您的ChartView完全可以创建一个UICollectionView,将其用作子视图,并作为该子视图的数据源和委托,因为UICollectionView的使用是ChartView的一个实现细节。

苹果在UIPickerView中做到了这一点。在幕后,选取器视图为每个组件创建一个表视图,并且选取器视图使其自身成为每个表视图的数据源和代理。您可以在UIPickerView.h中看到它符合UITableViewDataSource。您可以在运行时使用+[NSObject conformsToProtocol:]或通过在UIKit框架上使用class-dump来检查它是否符合UITableViewDelegate。或者,您可以编写一个测试应用程序并查看视图层次结构。调试器命令po [[UIApp keyWindow] recursiveDescription]将启动。

据我所知,UIPickerView是iOS软件开发工具包中唯一的视图子类,它充当其子视图的数据源和委托,但许多其他UIKit视图类都创建和管理自己的子视图。示例:

  • UIScrollView的滚动indicators.
  • UITableView有私有的子视图,有私有的页眉、页脚、节索引行分隔符subviews.
  • UIButton有一个专用的image.
  • UISegmentedControl来显示其文本,一个专用的UILabel来显示它的parts.
  • UISlider,而UIImageView UILabel使用几个私有的UIImageView子视图来显示它的UILabelUIImageView

使用几个专用的UIImageView子视图来显示它的UIImageView

票数 0
EN

Stack Overflow用户

发布于 2013-03-25 10:22:14

我的朋友,您回答了自己的问题:允许一个UIView协调/配置其他UIViews是错误的方法吗?是的!视图应该由控制员从组织的角度进行转换。我会构建一个图表控制器,它可以剔除单一视图和复合视图,一举两得。您可以将urls从Ajax路由到控制器,以更改图表中表示的数据

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15604825

复制
相关文章

相似问题

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