我目前遇到了一个问题.我正在创建一个游戏,我希望能够使用UITableView来显示数据(如级别).但是,我严格使用SpriteKit,似乎无法让UITableView和SpritKit工作.
我尝试在我的'GameScene'类(一个SKScene)中创建一个名为'gameTableView'的变量,并将其值设置为我创建的一个名为'GameRoomTableView'的类.
var gameTableView = GameRoomTableView()
该类具有'UITableView'的值(注意我没有将它设置为UITableViewController).
class GameRoomTableView: UITableView { }
我能够将tableView添加为我的SKView的子视图.我在我的GameScene类中的'DidMoveToView'函数中完成了这个.在其中得到的观点显示.
self.scene?.view?.addSubview(gameRoomTableView)
但是,我不知道如何更改部分的数量以及如何添加单元格.类不会让我访问这些类型的东西,除非它是一个viewController并且我需要一个实际的ViewController来获取它上班.我看过很多游戏都使用tableViews,但我不确定他们是如何让它工作的,哈哈.
请不要犹豫,告诉我我做错了什么,如果你知道一个更好的方法来解决这个问题.如果您有任何疑问,请告诉我.
通常我不喜欢UITableView
你做的子类,我更喜欢直接使用UITableView
委托和数据源到我的SKScene
类来控制表规范和数据到我的游戏代码.
但是你可能有自己的个人计划,所以我举个例子告诉你:
import SpriteKit import UIKit class GameRoomTableView: UITableView,UITableViewDelegate,UITableViewDataSource { var items: [String] = ["Player1", "Player2", "Player3"] override init(frame: CGRect, style: UITableViewStyle) { super.init(frame: frame, style: style) self.delegate = self self.dataSource = self } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } // MARK: - Table view data source func numberOfSections(in tableView: UITableView) -> Int { return 1 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return items.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell:UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell")! as UITableViewCell cell.textLabel?.text = self.items[indexPath.row] return cell } func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return "Section \(section)" } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { print("You selected cell #\(indexPath.row)!") } } class GameScene: SKScene { var gameTableView = GameRoomTableView() private var label : SKLabelNode? override func didMove(to view: SKView) { self.label = self.childNode(withName: "//helloLabel") as? SKLabelNode if let label = self.label { label.alpha = 0.0 label.run(SKAction.fadeIn(withDuration: 2.0)) } // Table setup gameTableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") gameTableView.frame=CGRect(x:20,y:50,width:280,height:200) self.scene?.view?.addSubview(gameTableView) gameTableView.reloadData() } }
输出: