在所有打开的 NSDocuments 中触发 IBAction
Trigger IBAction in all open NSDocuments
我正在更改图层背景颜色、字体颜色等各种内容。当我的用户单击文档中的按钮时,该过程从视图控制器(如下所示)中的 IBAction 开始 window。目前这有效,但只影响我的 OS 基于 X 文档的应用程序中的活动 window。
如果有多个文档 windows 同时打开,我希望更改影响所有打开的 windows,而不仅仅是活动的。
它只影响当前重新启动应用程序后的所有windows。
感谢接受以下回答:
在 window 控制器中添加:
@IBAction func themeButtonClicked(sender: AnyObject) {
var thetag = sender.tag()
NSNotificationCenter.defaultCenter().postNotificationName("updateTheme", object: nil, userInfo: ["tag": thetag])
}
override func windowDidLoad() {
super.windowDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "handleNotification:", name: "updateTheme", object: nil)
}
func handleNotification(notification:NSNotification){
let userInfo:Dictionary<String,Int!> = notification.userInfo as Dictionary<String,Int!>
let thetag:Int = userInfo["tag"]!
switch thetag {
case 0 :
theCurrentTheme = "white"
Defaults["theme"] = "white"
case 1 :
theCurrentTheme = "cream"
Defaults["theme"] = "cream"
case 2 :
theCurrentTheme = "black"
Defaults["theme"] = "black"
default:
theCurrentTheme = "white"
Defaults["theme"] = "white"
}
}
我认为,如果您想让更改对任何打开的文档可用,并且触发方不知道打开了哪些文档或有多少文档,您应该 post 一个 NSNotification
,并让感兴趣的各方收听(注册)。
因此,除了 window 控制器执行更改作为对其按钮 IBAction
的响应之外,他们还可以注册通知(最终 post window 控制器的另一个实例)并执行与按下按钮时完全相同的操作。
附录:您应该只从通知处理程序和[=11]中调用执行更改的实际方法 =] 你应该只 post 通知。否则,触发操作的 window 控制器将执行两次更改 !
...这意味着,您不再需要一个单独的私有方法(它仅从一个地方调用),而是可以在通知处理程序中编写更改逻辑。
我正在更改图层背景颜色、字体颜色等各种内容。当我的用户单击文档中的按钮时,该过程从视图控制器(如下所示)中的 IBAction 开始 window。目前这有效,但只影响我的 OS 基于 X 文档的应用程序中的活动 window。
如果有多个文档 windows 同时打开,我希望更改影响所有打开的 windows,而不仅仅是活动的。
它只影响当前重新启动应用程序后的所有windows。
感谢接受以下回答:
在 window 控制器中添加:
@IBAction func themeButtonClicked(sender: AnyObject) {
var thetag = sender.tag()
NSNotificationCenter.defaultCenter().postNotificationName("updateTheme", object: nil, userInfo: ["tag": thetag])
}
override func windowDidLoad() {
super.windowDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "handleNotification:", name: "updateTheme", object: nil)
}
func handleNotification(notification:NSNotification){
let userInfo:Dictionary<String,Int!> = notification.userInfo as Dictionary<String,Int!>
let thetag:Int = userInfo["tag"]!
switch thetag {
case 0 :
theCurrentTheme = "white"
Defaults["theme"] = "white"
case 1 :
theCurrentTheme = "cream"
Defaults["theme"] = "cream"
case 2 :
theCurrentTheme = "black"
Defaults["theme"] = "black"
default:
theCurrentTheme = "white"
Defaults["theme"] = "white"
}
}
我认为,如果您想让更改对任何打开的文档可用,并且触发方不知道打开了哪些文档或有多少文档,您应该 post 一个 NSNotification
,并让感兴趣的各方收听(注册)。
因此,除了 window 控制器执行更改作为对其按钮 IBAction
的响应之外,他们还可以注册通知(最终 post window 控制器的另一个实例)并执行与按下按钮时完全相同的操作。
附录:您应该只从通知处理程序和[=11]中调用执行更改的实际方法 =] 你应该只 post 通知。否则,触发操作的 window 控制器将执行两次更改 !
...这意味着,您不再需要一个单独的私有方法(它仅从一个地方调用),而是可以在通知处理程序中编写更改逻辑。