gpt4 book ai didi

class - 快速更改类中变量的值

转载 作者:行者123 更新时间:2023-11-28 13:14:52 24 4
gpt4 key购买 nike

我有 2 个分类:GameViewController(NSViewController 的子类)这是 Game 类:

class Game {

required init(num : CGFloat, picName : String, gameName : String, description : String, windowHeight : CGFloat) {
self.number = num
self.pictureName = picName
self.name = gameName
self.desc = description
self.height = windowHeight
}

var number : CGFloat
var pictureName : String
var name : String
var desc : String
var height : CGFloat

var image : NSImage {
return NSImage(named: pictureName)!
}

var imageView : NSImageView {
return NSImageView(frame: NSRect(x: 0, y: height - (110 * (number - 1)) - 100, width: 100, height: 100))
}

var nameField : NSTextField {
return NSTextField(frame: NSRect(x: 110, y: height - (110 * (number - 1)) - 100, width: 300, height: 30))
}

var descField : NSTextField {
return NSTextField(frame: NSRect(x: 110, y: height - (110 * (number - 1)) - 140, width: 300, height: 60))
}


func setImage() {
imageView.image = image
}

func setNameField() {
nameField.font = NSFont(name: "System", size: 15.0)
nameField.stringValue = "Name"
nameField.alignment = NSTextAlignment(rawValue: 2)!
nameField.selectable = false
nameField.editable = false
}

func setDescField() {
descField.selectable = false
descField.editable = false
descField.stringValue = desc
descField.font = NSFont(name: "System", size: 11.0)
}

}

viewDidAppear 中,我这样做:

var size = self.view.window?.frame.size
var newGame = Game(num: 1, picName: "Bomb.png", gameName: "Bomber", description: "Just a simpla application", windowHeight: size!.height)
newGame.setDescField()
newGame.setImage()
newGame.setNameField()
println(newGame.descField.editable)
self.view.addSubview(newGame.imageView)
self.view.addSubview(newGame.descField)
self.view.addSubview(newGame.nameField)

并且 descField.editable 始终是 true,即使我在 Game< 类的函数中编写了 descField.editable = false/。如何解决?

最佳答案

我找到了解决方案。您需要将所有字段和 ImageView 声明为惰性变量并在 init 中使用它们:

import Foundation
import Cocoa
import AppKit

class Game {

init(num : CGFloat, picName : String, gameName : String, description : String, windowHeight : CGFloat, sender : NSViewController) {
self.number = num
self.pictureName = picName
self.name = gameName
self.desc = description
self.height = windowHeight
imageView = NSImageView(frame: NSRect(x: 0, y: 0, width: 100, height: 100))
nameField = NSTextField(frame: NSRect(x: 110, y: 60, width: 300, height: 30))
descField = NSTextField(frame: NSRect(x: 110, y: 0, width: 300, height: 60))

nameField.font = NSFont(name: "System", size: 15.0)
nameField.stringValue = self.name
nameField.alignment = NSTextAlignment(rawValue: 2)!
nameField.selectable = false
nameField.editable = false
nameField.backgroundColor = sender.view.window?.backgroundColor
nameField.bordered = false

descField.selectable = false
descField.editable = false
descField.stringValue = desc
descField.font = NSFont(name: "System", size: 11.0)
descField.backgroundColor = NSColor.controlColor()
descField.bordered = true
descField.backgroundColor = sender.view.window?.backgroundColor

imageView.image = NSImage(named: self.pictureName)!

gameView = NSView(frame: NSRect(x: 0, y: /*height - (100 * num)*/ height - (120 * num), width: 600, height: 100))

button = NSButton(frame: NSRect(x: 0, y: 0, width: 600, height: 100))
button.tag = Int(number)
button.action = nil

var gesture = NSClickGestureRecognizer(target: sender, action: Selector("buttonPressed:"))
gesture.numberOfClicksRequired = 1
gesture.buttonMask = 0x1
button.addGestureRecognizer(gesture)

button.bezelStyle = NSBezelStyle(rawValue: 6)!
button.transparent = true

gameView.addSubview(nameField)
gameView.addSubview(imageView)
gameView.addSubview(descField)
gameView.addSubview(button)

}

var number : CGFloat
var pictureName : String
var name : String
var desc : String
var height : CGFloat

lazy var button : NSButton = NSButton()
lazy var imageView : NSImageView = NSImageView()
lazy var nameField : NSTextField = NSTextField()
lazy var descField : NSTextField = NSTextField()
lazy var gameView : NSView = NSView()

}

然后你可以这样调用它:

var newGame = Game(num: number, picName: "Bomb2.png", gameName: "Bomber", description: "Just a simple application", windowHeight: size!.height, sender: self)
self.view.addSubview(newGame.gameView)

关于class - 快速更改类中变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29397907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com