簡體   English   中英

子類化UIView

[英]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 ,您可以在我的紅色框中看到它:

拖動<code> UIView </ code>

3)單擊Show the Assistant Editor ,和Ctrl拖動viewvc ,設置名稱custom

在此處輸入圖片說明

4)然后在vcviewDidload函數中,調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM