【问题标题】:Subclassing UIView子类化 UIView
【发布时间】:2017-04-08 04:48:39
【问题描述】:

我看到这个话题在别处讨论过,但我没有看到我的问题的答案。

我将 UIView 子类化以创建自定义视图。目前我正在使用界面生成器来创建 UIView,然后将自定义类选项设置为我的子类。

第一个问题。当我这样做时,如何从我的代码中引用该实例?我有一个我想调用的公共函数来更新我的视图,但我不知道如何从我的视图控制器调用它

第二个问题。我从我的视图控制器中创建了一个类的实例,只是在玩,我注意到我创建的公共函数不适用于该实例。从 UIView 继承时可以创建公共函数吗?

【问题讨论】:

  • 您需要使用相关代码更新您的问题,并使用代码清楚地显示您的问题所在。
  • 我的第一个问题是关于界面构建器的。我没有任何代码可以显示。我认为第二个问题会用第一个问题来回答。

标签: ios swift uiview


【解决方案1】:

这很容易做到:

1)子类UIView创建CustomView,在你的项目中添加你的公共function

import UIKit

class CunstomView: UIView {

/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
    // Drawing code
}
*/

public func printHello() {


    print("hello")
}
}

2)在你的storyboard中,将UIView拖入你的vc,并将类设置为CunstomView,你可以在我的红框中看到:

3)点击Show the Assistant Editor,按住ctrl-拖动viewvc,设置名称custom

4)然后在您的vcviewDidload 函数中,调用公共函数:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var custom: CunstomView!

    override func viewDidLoad() {
        super.viewDidLoad()

        custom.printHello()
    }


}

5)结果:

【讨论】:

  • 很好,全面的答案。 (已投票)
  • 太棒了,正是我想要的。正如我所怀疑的,这也回答了第二个问题。谢谢!
【解决方案2】:

第一个问题。当我这样做时,如何从 我的代码?我有一个公共函数,我想调用它来更新我的 视图,但我不知道如何从视图控制器调用它

A:视图不能单独存在于应用程序中。您需要 viewcontroller 来处理自定义视图。然后在那个 VC 中,您可以将视图称为 IBOutlet。

第二个问题。我从我的内部创建了一个类的实例 视图控制器只是在玩,我注意到了公共功能 我创建的实例不适用于该实例。我可以创建公共 我从 UIView 继承时的功能?

A:您可以创建自定义视图的公共函数,只需在头文件中声明即可。然后在您的 VC 中导入标头。然后你可以访问它。

【讨论】:

    【解决方案3】:

    您可以尝试使用以下方法从 IB 更新您的视图。

    目标-C:

    -(void)awakeFromNib {
        [super awakeFromNib];
    
        //do something
    }
    

    斯威夫特

    override func awakeFromNib() {
        super.awakeFromNib()
    }
    

    第二个问题

    您的意思是自定义视图不响应您在视图控制器中创建的功能吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多