Macos 在Swift中将IBOutlets添加到其他类文件中?
我正在尝试用Swift for OS X(Xcode 6.1 GM)构建一个应用程序,它是一个菜单栏代理,具有一个用于首选项的窗口 虽然我已经能够让我的菜单栏功能发挥作用,但它都存在于AppDelegate中,看起来相当混乱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
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视图控制器。然后在那里设置您的操作和出口。我建议你在继续之前在电视上看一些视频