【问题标题】:Inheritance of view视图的继承
【发布时间】:2014-10-04 00:54:04
【问题描述】:

我是 iOS 新手,我正在尝试了解该平台的工作原理,如果我提出任何愚蠢的问题,请见谅。

我的问题是基于这篇文章中存在的问题:
Inheritance on view controller Objective c

到目前为止,我知道我可以继承控制器,但我可以继承视图吗?我认为答案是否定的。如果是这样,解决以下问题的最佳方法是什么?

我有一个纸牌配对游戏。现在,我必须将游戏扩展为类似的纸牌游戏,但套牌和规则不同。

因此,我想重用代码并拥有一个主控制器和 2 个继承的控制器来重新定义卡组的创建。现在我需要有 2 个不同的视图,因为这两个游戏有不同数量的卡片。那么,最好的方法是什么?我是否必须将所有控件从一个视图复制到另一个视图并修改需要的内容?

【问题讨论】:

  • 您显然有一些重大的误解。 UIView 是一个类。 UIViewController 是一个类。 UIButton 是 UIControl 的子类,UIControl 是 UIView 的子类。类继承定义了类的功能以及它与其他类似类的共同功能。继承定义某些视图放置在其他视图中以构建更复杂的视图结构的方式。
  • (典型的 iPhone 屏幕上可能有 50 个视图。每个标签是一个单独的视图,每个图像是一个单独的视图,每个按钮是一个单独的视图,并且有“容器”视图包含其他视图。您在屏幕上看到的所有内容(以及很多您看不到的内容)都是一个视图。)
  • 感谢您的解释,不了解平台,我想确保没有机制可以共享视图的某些部分。因此,如果我想创建一个与另一个视图相似的视图,唯一的方法是复制该视图以创建一个新视图……这样对吗?
  • 视图由视图控制器“拥有”。如果你想“共享”一个视图,在你的专用视图控制器之间使用一个通用的超类视图控制器。

标签: ios objective-c inheritance


【解决方案1】:

您可以很好地继承视图。只需在添加新文件时创建UIView 的子类,然后导入该子类。

关于你的问题,我觉得解决它的最好方法是有一个 UIViewController 的子类,称为 CardsController 之类的东西,它具有甲板属性,可以根据一组管理卡片的显示和更改由您定义的规则。然后,为您的两个游戏中的每一个进一步子类化该视图控制器,因为它们都使用卡片。

【讨论】:

  • 我不确定我是否理解你的答案...(如果我错了,请纠正我)我的 Main.storyboard 中有一个视图,两个不同的控制器用于 2 个不同的卡,一个继承另一个...问题是我只有一个视图,并且在 Xcode 的“自定义类”右侧选项卡中,我只能选择一个控制器...这是对的吗?那么您是否建议视图只是一个视图,但我应该控制控制器中按钮/元素的可见性?
【解决方案2】:

您可以对任何类型的对象、控制器、视图等进行子类化 例如:

@interface MyCustomView : UIView

@end

如果您的两个不同视图共享大量代码,则不应分别创建它们。它们应该有一个具有公共方法的共同父级,并且它们都继承自这个通用 uiview

【讨论】:

  • 好吧,也许我弄错了,现在很困惑,但不是控制器中的代码而不是视图吗?视图不是只有布局对象吗?我有一个包含所有代码的主控制器,然后我创建了一个从主控制器继承并覆盖一些抽象方法的新控制器......现在我不明白下一步要对我继承的视图有什么不同控制器...
  • 当您创建UIViewController 时,它有一个视图,但您可以向其中添加子视图或以任何您想要的方式对其进行修改。您可以创建一个继承自 UIView 的新类,并将这个新视图添加为主 UIViewController 视图的子视图
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多