当前位置:  开发笔记 > 编程语言 > 正文

在Spritekit中使用UITableView

如何解决《在Spritekit中使用UITableView》经验,为你挑选了1个好方法。

我目前遇到了一个问题.我正在创建一个游戏,我希望能够使用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,但我不确定他们是如何让它工作的,哈哈.

请不要犹豫,告诉我我做错了什么,如果你知道一个更好的方法来解决这个问题.如果您有任何疑问,请告诉我.



1> Alessandro O..:

通常我不喜欢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()
    }
}

输出:

在此输入图像描述

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有