我有一个问题是,当我可以在任何视图控制器中放置尽可能多的 UIView
时,我们为什么要创建一个派生自UIViews
的类,并且可以使用 IBOutlet
在子类化UIView
之后是否有任何特殊功能。
可能不是一个有效的问题,但我真的很想知道答案。
任何帮助将不胜感激。
先谢谢。 例如:
@Interface CustomView: UIView
{
}
答案 0 :(得分:2)
通常,您将UIView或任何UIComponent子类化为自定义。子类时,您可以覆盖drawRect
方法并进行自定义。
查看子类化UIView here的最佳实践。
答案 1 :(得分:1)
这完全取决于!如果我想在我的视图上绘制一些自定义形状怎么办?我可以将UIView子类化并使用drawRect:
制作我想要的任何东西,然后使用它。所以,原因很多,但实际上取决于你的愿望。
进一步支持。请参阅以下链接:
答案 2 :(得分:1)
仅当您需要添加一些额外的属性,行为时才需要子类,例如视图应该具有一些光泽效果,圆角矩形等。
然而,从UIView或任何其他Cocoa类(基础或UIKit或任何其他工具包),他们为您提供了大部分所需的共同功能,但有时根据您的要求,您需要额外添加一些东西。为此,您可以通过
来扩展课程子类化或继承。
课程扩展。
分类
答案 3 :(得分:1)
自定义视图更易于重复使用。您可以在视图中封装一些逻辑(例如绘图逻辑),然后重用此视图。
在我目前的项目中,书页显示在几个地方。因此,在一个UIView中填充页面表示/绘图非常方便。
答案 4 :(得分:1)
有几个用例可以应用于UIView
继承,,例如:
UIView
(尽管也可以使用category
来完成,尽管它以不同的方式工作,通常适用于不同的用例)UIView
继承的类中重用的基本视图,而不必在每个子类上实现自定义外观和/或行为以下一些例子
自定义控制 - 你想要实现一个4状态的平面按钮,它会在每次点击时“前进”到下一个状态。每个状态以不同的方式可视地表示,例如通过改变标签,边框和/或颜色。 注意:在此示例中,最好扩展UIControl
或UIButton
,它们都是UIView
扩展程序 - 您希望视图具有圆角边框,标题和正文部分,标题字体较大且颜色反转(深灰色背景上的白色文字)。< / p>
分组 - 您有一个面板,您想要显示一个用户个人资料,其中包含多个标签和值(即用户名:myusername),一张动态布局的个人资料图片。
基类 - 您有一组共享外观的视图,带有圆角边框,右上角的标题与边框重叠,内部面板用于布置内容。您创建一个名为UIView
的{{1}}子类,然后从中继承其他类,自动继承外观
在许多情况下(但不是全部)你可以跳过继承并在视图控制器中实现所有东西,但除了是一个不好的面向对象设计(视图高度依赖于视图控制器),它使视图控制器结束复杂。通过继承SOMyPanelBaseView
而不是在单独的类中实现视图功能,并将这些功能插入视图控制器。
此外,UIView
继承的类可以重复使用 - 而如果您在视图控制器中实现所有内容,除非您复制和粘贴代码,否则无法实现。
总而言之,我认为您的问题可以概括为:为什么我应该在面向对象编程中使用继承?
在OOP中使用继承的相同原因与在特定情况下使用继承相同,在我们的情况下为UIView
。在wikipedia