簡體   English   中英

Swift實例化一個UIViewController並作為子視圖添加到同一文件中

[英]Swift instantiating a UIViewController and adding as subview in same file

我是Swift和原生iOS開發的新手。

我成功地在Swift中創建了一個標簽,該標簽在我的應用中顯示如下:

import UIKit
import SpreadsheetView

class SampleView: UIView {

  override init(frame: CGRect) {
    super.init(frame: frame)

    let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 50))
    label.text = "This is Swift"
    self.addSubview(label)

  }

  required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }

}

但是我現在需要添加一個SpreadsheetView-從這里-https://github.com/kishikawakatsumi/SpreadsheetView

我沒有添加標簽,而是將代碼更改為:

import UIKit
import SpreadsheetView

class ViewController: UIViewController, SpreadsheetViewDataSource {
  @IBOutlet weak var spreadsheetView: SpreadsheetView!

  override func viewDidLoad() {
    super.viewDidLoad()
    spreadsheetView.dataSource = self
  }

  func numberOfColumns(in spreadsheetView: SpreadsheetView) -> Int {
    return 200
  }

  func numberOfRows(in spreadsheetView: SpreadsheetView) -> Int {
    return 400
  }

  func spreadsheetView(_ spreadsheetView: SpreadsheetView, widthForColumn column: Int) -> CGFloat {
    return 80
  }

  func spreadsheetView(_ spreadsheetView: SpreadsheetView, heightForRow row: Int) -> CGFloat {
    return 40
  }
}

class SampleView: UIView {

  override init(frame: CGRect) {
    super.init(frame: frame)

    let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil)
    let controller = storyboard.instantiateViewController(withIdentifier: "ViewController");
    self.addSubview(controller.view);
  }

  required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }

}

但是,在運行時,我得到了一個SIGABRT,這是否是正確的方法。 我看到很多關於添加控制器的文章,例如在Swift中將View控制器添加為子視圖,但是請您幫我解決上述問題。

這是我的截圖:

嘗試這個:

let controller = ViewController()

您不需要SampleView類。 我認為您感到困惑,因為@IBOutlet weak var spreadsheetView: SpreadsheetView! 您不必遵循此過程。 您只需創建一個實例並相應地使用它。

如果您要使view成為SpreadsheetView ,請按照以下方式使用它:

import UIKit
import SpreadsheetView

class ViewController: UIViewController, SpreadsheetViewDataSource {

    let spreadsheetView = SpreadsheetView()  //have an SpreadsheetView

    override func viewDidLoad() {
        super.viewDidLoad()

        spreadsheetView.dataSource = self
        self.view = spreadsheetView  //set your controller's container view as that spreadsheetView
    }

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


    func numberOfColumns(in spreadsheetView: SpreadsheetView) -> Int {
        return 200
    }

    func numberOfRows(in spreadsheetView: SpreadsheetView) -> Int {
        return 400
    }

    func spreadsheetView(_ spreadsheetView: SpreadsheetView, widthForColumn column: Int) -> CGFloat {
        return 80
    }

    func spreadsheetView(_ spreadsheetView: SpreadsheetView, heightForRow row: Int) -> CGFloat {
        return 40
    }

}


編輯:不同的方法

如果您仍想使用@IBOutlet方法,請參見下圖,並按照步驟(1-2-3-4)進行操作 用SpreadsheetView連接視圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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