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