将变量传递给NSView

将变量传递给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 
} 

考虑到类名应该以 一个大写字母。

+0

我注意到类名和丑陋的循环我从来不知道循环样式存在(自学)我得到的错误。 “类型'NSView'的值没有成员'数组''谢谢 – oldman

+0

在Interface Builder中,你必须将自定义视图的类设置为'myGUI' – vadian

+0

我已经将视图的类设置为myGUI,但仍然没有运气 – oldman