将变量传递给NSView
问题描述:
我试图将数组的内容传递给NSView以显示矩形x位置。 我已经设置了一个使用随机数字和按钮的版本,并将代码减少到了最小,所以希望它更具可读性。我曾尝试将数组创建为全局变量。我也尝试从这个答案中反转代码。 Pass data between view controllers。我已插入评论:“这就是我想实现的”,它解释了我想要达到的目标。 我希望有人可以帮忙吗?感谢将变量传递给NSView
斯威夫特3的Xcode 8.1 OSX的Mac OS不是iOS的
//
// MainWindowController.swift
import Cocoa
class MainWindowController: NSWindowController {
@IBOutlet weak var myView: NSView!
var myArray = [Int]()
override func windowDidLoad() {
super.windowDidLoad()
//just for testing
for i in 0..<6{
myArray.append(i*10)
}
}//EO Overide
//just for testing
@IBAction func myButton(_ sender: AnyObject) {
myFunc()
}
func myFunc(){
for i in 0..<6{
let diceRoll = Int(arc4random_uniform(6) + 1)
myArray[i]=diceRoll * 10
}
myView.needsDisplay = true
}//EO myFunc
}//EnD oF thE wORld
class myGUI: NSView {
override func draw(_ dirtyRect: NSRect) {
for i in..<6{
let fromArray = myArray[i]
let box1 = NSMakeRect(CGFloat(fromArray),0,4,60)//This is what i want to do
let box1Color = NSColor(red: 0.4, green: 0.4, blue: 0.4, alpha: 1.0)
let box1Path: NSBezierPath = NSBezierPath(rect: box1)
box1Color.set()
box1Path.fill()
}//EO For
}}
答
既然你有很强的参考的NSView
子类只需添加一个属性:
class myGUI: NSView {
var xPosArray = [Int]()
override func draw(_ dirtyRect: NSRect) {
for xPos in xPosArray { // please avoid ugly C-style index based loops
let box1 = NSMakeRect(CGFloat(xPos), 0, 4, 60)
...
,并简单地将它设置在view controller
func myFunc(){
for i in 0..<6 {
let diceRoll = Int(arc4random_uniform(6) + 1)
myArray[i]=diceRoll * 10
}
myView.xPosArray = myArray
myView.needsDisplay = true
}
考虑到类名应该以 一个大写字母。
我注意到类名和丑陋的循环我从来不知道循环样式存在(自学)我得到的错误。 “类型'NSView'的值没有成员'数组''谢谢 – oldman
在Interface Builder中,你必须将自定义视图的类设置为'myGUI' – vadian
我已经将视图的类设置为myGUI,但仍然没有运气 – oldman