什么是子类化UIView的需要

时间:2014-03-18 07:30:55

标签: ios iphone objective-c ipad uiview

我有一个问题是,当我可以在任何视图控制器中放置尽可能多的 UIView 时,我们为什么要创建一个派生自UIViews的类,并且可以使用 IBOutlet

在子类化UIView之后是否有任何特殊功能。 可能不是一个有效的问题,但我真的很想知道答案。

任何帮助将不胜感激。

先谢谢。 例如:

@Interface CustomView: UIView
{

}

5 个答案:

答案 0 :(得分:2)

通常,您将UIView或任何UIComponent子类化为自定义。子类时,您可以覆盖drawRect方法并进行自定义。

查看子类化UIView here的最佳实践。

答案 1 :(得分:1)

这完全取决于!如果我想在我的视图上绘制一些自定义形状怎么办?我可以将UIView子类化并使用drawRect:制作我想要的任何东西,然后使用它。所以,原因很多,但实际上取决于你的愿望。

进一步支持。请参阅以下链接:

https://softwareengineering.stackexchange.com/questions/209576/what-are-the-reasons-to-create-uiview-subclass

答案 2 :(得分:1)

仅当您需要添加一些额外的属性,行为时才需要子类,例如视图应该具有一些光泽效果,圆角矩形等。

然而,从UIView或任何其他Cocoa类(基础或UIKit或任何其他工具包),他们为您提供了大部分所需的共同功能,但有时根据您的要求,您需要额外添加一些东西。为此,您可以通过

来扩展课程
  1. 子类化或继承。

  2. 课程扩展。

  3. 分类

答案 3 :(得分:1)

自定义视图更易于重复使用。您可以在视图中封装一些逻辑(例如绘图逻辑),然后重用此视图。

在我目前的项目中,书页显示在几个地方。因此,在一个UIView中填充页面表示/绘图非常方便。

答案 4 :(得分:1)

有几个用例可以应用于UIView继承,,例如

  1. 实施自定义控件
  2. 使用实现特定功能的方法扩展UIView(尽管也可以使用category来完成,尽管它以不同的方式工作,通常适用于不同的用例)
  3. 将相关视图分组到单个视图中,以提高使用率,公开干净的界面并在内部处理视图管理
  4. 创建一个您想在其他UIView继承的类中重用的基本视图,而不必在每个子类上实现自定义外观和/或行为
  5. 以下一些例子

    自定义控制 - 你想要实现一个4状态的平面按钮,它会在每次点击时“前进”到下一个状态。每个状态以不同的方式可视地表示,例如通过改变标签,边框和/或颜色。 注意:在此示例中,最好扩展UIControlUIButton,它们都是UIView

    的子类

    扩展程序 - 您希望视图具有圆角边框,标题和正文部分,标题字体较大且颜色反转(深灰色背景上的白色文字)。< / p>

    分组 - 您有一个面板,您想要显示一个用户个人资料,其中包含多个标签和值(即用户名:myusername),一张动态布局的个人资料图片。

    基类 - 您有一组共享外观的视图,带有圆角边框,右上角的标题与边框重叠,内部面板用于布置内容。您创建一个名为UIView的{​​{1}}子类,然后从中继承其他类,自动继承外观

    在许多情况下(但不是全部)你可以跳过继承并在视图控制器中实现所有东西,但除了是一个不好的面向对象设计(视图高度依赖于视图控制器),它使视图控制器结束复杂。通过继承SOMyPanelBaseView而不是在单独的类中实现视图功能,并将这些功能插入视图控制器。 此外,UIView继承的类可以重复使用 - 而如果您在视图控制器中实现所有内容,除非您复制和粘贴代码,否则无法实现。

    总而言之,我认为您的问题可以概括为:为什么我应该在面向对象编程中使用继承? 在OOP中使用继承的相同原因与在特定情况下使用继承相同,在我们的情况下为UIView。在wikipedia

    上很好地描述了该主题