Macos 在Swift中将IBOutlets添加到其他类文件中?

Macos 在Swift中将IBOutlets添加到其他类文件中?,macos,swift,interface-builder,xcode6,Macos,Swift,Interface Builder,Xcode6,我正在尝试用Swift for OS X(Xcode 6.1 GM)构建一个应用程序,它是一个菜单栏代理,具有一个用于首选项的窗口 虽然我已经能够让我的菜单栏功能发挥作用,但它都存在于AppDelegate中,看起来相当混乱 import Cocoa import AppKit import Foundation @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { var downloadClass

我正在尝试用Swift for OS X(Xcode 6.1 GM)构建一个应用程序,它是一个菜单栏代理,具有一个用于首选项的窗口

虽然我已经能够让我的菜单栏功能发挥作用,但它都存在于AppDelegate中,看起来相当混乱

import Cocoa
import AppKit
import Foundation

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {


var downloadClass = DownloadController()


@IBOutlet weak var window: NSWindow!
@IBOutlet weak var downloadButton: NSButton!
@IBOutlet weak var subredditField: NSTextField!

@IBOutlet weak var nsfwMarked: NSButton!
@IBOutlet weak var sortFilter: NSPopUpButton!

var statusBar = NSStatusBar.systemStatusBar()
var statusBarItem : NSStatusItem = NSStatusItem()
var menu: NSMenu = NSMenu()
var subSort: NSMenu = NSMenu()

override func awakeFromNib() {
    //Add statusBarItem

    statusBarItem = statusBar.statusItemWithLength(-1)
    statusBarItem.menu = menu

    let icon = NSImage(named: "arrow16black")
    statusBarItem.image = icon

    var downloadItem: NSMenuItem = NSMenuItem()
    downloadItem.title = "Download"
    downloadItem.action = Selector("downloadPressed:")
    downloadItem.keyEquivalent = ""
    menu.addItem(downloadItem)

    var menuItem: NSMenuItem = NSMenuItem()
    menuItem.title = "Preferences..."
    //Open view on button click
    menuItem.action = Selector("setWindowVisible:")
    menuItem.keyEquivalent = ""
    menu.addItem(menuItem)

    //define sorting filters
    let sortOptions = NSArray(array: ["Hot","New","Top","Rising","Controversial"])
    sortFilter.addItemsWithTitles(sortOptions)

    var sortItem: NSMenuItem = NSMenuItem()
    sortItem.title = "Sort By"
    menu.addItem(sortItem)

    //Add sort options as submenu
    for sort in sortOptions {
        var item: NSMenuItem = NSMenuItem()
        item.title = sort as String
        item.keyEquivalent = ""
        item.action = Selector("setActiveSort:")
        subSort.addItem(item)
    }
    menu.setSubmenu(subSort, forItem: sortItem)

    //Test receiving menu
    let userDefaults = NSUserDefaults.standardUserDefaults()
    if let filterDefault : AnyObject = userDefaults.objectForKey("filter") {
        var active : NSString = filterDefault as NSString
        sortFilter.selectItemWithTitle(active)
        println(active)
        subSort.itemWithTitle(active)?.state = 1
    }
}

func setActiveSort(sender: NSMenuItem) {
    //Turn off all other active filters
    let allSorts = subSort.itemArray
    var a = 0
    while a < subSort.numberOfItems {
        var filter = subSort.itemAtIndex(a)
        filter?.state = 0
        a++
    }
    //Make selected filter active and store value in Defaults
    sender.state = 1
    sortFilter.selectItemWithTitle(sender.title)
    let userDefaults = NSUserDefaults.standardUserDefaults()
    userDefaults.setObject(sender.title, forKey: "filter")
}

@IBAction func downloadPressed(sender: AnyObject) {
    let subreddit: NSString = NSString(string: subredditField.stringValue)
    let sortBy: NSString = NSString(string: sortFilter.titleOfSelectedItem!)
    var sort = sortBy.lowercaseString
    let nsfw: Bool = Bool(nsfwMarked.integerValue)
    downloadClass.startController(subreddit, sortBy: sort, markNSFW: nsfw)
}

func setWindowVisible(sender: AnyObject) {
    self.window!.orderFront(self)
}

func applicationDidFinishLaunching(aNotification: NSNotification?) {
    // Insert code here to initialize your application
    //Don't display application window at launch
    self.window!.orderOut(self)

    //On launch, get user preferences if set
    let userDefaults = NSUserDefaults.standardUserDefaults()
    if let nsfwMarkedPref : AnyObject = userDefaults.objectForKey("NSFW?") {
        //Set nsfw state to stored value
        nsfwMarked.state = (nsfwMarkedPref.integerValue == 1) ? NSOnState : NSOffState;
    }
    if let storedSubreddit : AnyObject = userDefaults.objectForKey("subreddit") {
        //set subreddit string to stored value
        subredditField.stringValue = storedSubreddit as String
    }

    //Get screen resolution
    let ms = NSScreen.mainScreen()
    let frame = ms?.frame
    println(frame!.size.width)
}

func applicationWillTerminate(aNotification: NSNotification?) {
    // Insert code here to tear down your application

    //Set the user preferences on exit.. this should be moved to onButtonState
    let userDefaults = NSUserDefaults.standardUserDefaults()
    userDefaults.setObject(nsfwMarked.integerValue, forKey: "NSFW?")
    let subreddit: NSString = NSString(string: subredditField.stringValue)
    userDefaults.setObject(subreddit, forKey: "subreddit")
}


}
导入可可粉
导入应用程序包
进口基金会
@非应用程序主
类AppDelegate:NSObject,NSApplicationDelegate{
var downloadClass=DownloadController()
@IBVAR窗口:NSWindow!
@IBOUTLE弱var下载按钮:NSButton!
@IBOutlet弱var子RedditField:NSTextField!
@IBOUTLE弱var nsfwMarked:NSButton!
@IBOUTLE弱var排序过滤器:NSPOUPPBUTON!
var statusBar=NSStatusBar.systemStatusBar()
变量statusBarItem:NSStatusItem=NSStatusItem()
变量菜单:NSMenu=NSMenu()
var subSort:NSMenu=NSMenu()
重写func awakeFromNib(){
//添加statusBarItem
statusBarItem=statusBar.statusItemWithLength(-1)
statusBarItem.menu=菜单
让icon=NSImage(命名为:“arrow16black”)
statusBarItem.image=图标
var downloadItem:NSMenuItem=NSMenuItem()
downloadItem.title=“下载”
downloadItem.action=选择器(“downloadPressed:”)
downloadItem.keyEquivalent=“”
菜单.添加项(下载项)
var menuItem:NSMenuItem=NSMenuItem()
menuItem.title=“首选项…”
//单击按钮打开视图
menuItem.action=选择器(“setWindowVisible:”)
menuItem.keyEquivalent=“”
菜单.附加项(菜单项)
//定义排序过滤器
让sortOptions=NSArray(数组:[“热”、“新”、“顶”、“上升”、“有争议”])
sortFilter.addItemsWithTitles(排序选项)
var sortItem:NSMenuItem=NSMenuItem()
sortItem.title=“排序依据”
菜单.附加项(sortItem)
//将排序选项添加为子菜单
用于分类中的排序{
变量项:NSMenuItem=NSMenuItem()
item.title=按字符串排序
item.keyEquivalent=“”
item.action=选择器(“setActiveSort:”)
子部分附加项(项目)
}
菜单.设置子菜单(子部分,用于项目:sortItem)
//测试接收菜单
让userDefaults=NSUserDefaults.standardUserDefaults()
如果let filterDefault:AnyObject=userDefaults.objectForKey(“过滤器”){
var active:NSString=filterDefault作为NSString
sortFilter.selectItemWithTitle(活动)
println(活动)
subSort.itemWithTitle(活动)?.state=1
}
}
func setActiveSort(发送方:NSMenuItem){
//关闭所有其他有源滤波器
设allSorts=subSort.itemArray
变量a=0
而a
当前,我的视图中downloadButton的iAction将调用DownloadController中的函数。但理想情况下,我希望能够在DownloadController.swift文件中按download的iAction,但我似乎不知道如何进行此操作


谢谢

创建一个XIB文件或使用故事板并将其文件所有者设置为UI视图控制器。然后在那里设置您的操作和出口。我建议你在继续之前在电视上看一些视频