2016-11-24 143 views
0

我看到这个话题在其他地方讨论过,但我没有看到我的问题的答案。继承UIView

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

第一个问题。当我这样做时,如何从我的代码中引用该实例?我有一个公共职能,我想打电话给我更新我的观点,但我不知道如何从我的视图控制器调用它

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

+1

您需要与相关的代码来更新你的问题,并清楚地显示在您的问题是与代码。 – rmaddy

+0

我的第一个问题是关于接口构建器的更多信息。我没有任何代码来表明这一点。我认为第二个问题会回答第一个问题。 – lusher00

回答

2

这是很容易做到:

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,您可以看到在我的红框中:

drag <code>UIView</code>

3)点击Show the Assistant Editor,和Ctrl拖动viewvc,设置名称custom

enter image description here

4)然后在vcviewDidload功能,可以调用公共函数:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var custom: CunstomView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     custom.printHello() 
    } 


} 

5)结果:

the result

+0

好,全面的答案。 (投票) –

+0

真棒,我正在寻找。正如我怀疑的那样,这也回答了第二个问题。谢谢! – lusher00

0

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

的Objective-C:

-(void)awakeFromNib { 
    [super awakeFromNib]; 

    //do something 
} 

斯威夫特

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

第二个问题

你指的是自定义视图不回答您的视图控制器中创建的功能?

0

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

一个电话:视图不能被自己的应用程序存在。您需要viewcontroller来处理自定义视图。然后在VC中,您可以将视图作为IBOutlet引用。

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

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