2017-03-18 267 views
0

我試圖將數組的內容傳遞給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 

    }} 

回答

0

既然你有很強的參考的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