[英]Subclassing UIView
我看到該主題在其他地方討論過,但是我的問題沒有答案。
我將UIView子類化以創建自定義視圖。 目前,我正在使用界面生成器來創建UIView,然后將自定義類選項設置為我的子類。
第一個問題。 當我這樣做時,如何從我的代碼中引用該實例? 我有一個公共函數,我想調用它來更新視圖,但是我不知道如何從視圖控制器中調用它
第二個問題。 我只是在我的視圖控制器中創建了一個類的實例,然后才發現,創建的公共函數不適用於該實例。 從UIView繼承時可以創建公共功能嗎?
很容易做到:
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
CunstomView
,將UIView
拖到vc
,並將類設置為CunstomView
,您可以在我的紅色框中看到它:
3)單擊Show the Assistant Editor
,和Ctrl拖動view
到vc
,設置名稱custom
:
4)然后在vc
的viewDidload
函數中,調用public函數:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var custom: CunstomView!
override func viewDidLoad() {
super.viewDidLoad()
custom.printHello()
}
}
5)結果:
您可以嘗試使用以下方法從IB更新視圖。
目標C:
-(void)awakeFromNib {
[super awakeFromNib];
//do something
}
迅速
override func awakeFromNib() {
super.awakeFromNib()
}
第二個問題
您是說自定義視圖沒有回答您在視圖控制器中創建的功能嗎?
第一個問題。 當我這樣做時,如何從我的代碼中引用該實例? 我有一個公共函數,我想調用它來更新視圖,但是我不知道如何從視圖控制器中調用它
答:視圖本身不能存在於應用程序中。 您需要viewcontroller來處理自定義視圖。 然后在該VC中,您可以將該視圖稱為IBOutlet。
第二個問題。 我只是在我的視圖控制器中創建了一個類的實例,然后才發現,創建的公共函數不適用於該實例。 從UIView繼承時可以創建公共功能嗎?
答:您可以創建自定義視圖的公共功能,只需在頭文件中聲明它們即可。 然后將標題導入您的VC。 然后您可以訪問它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.