NSComboBox getGet 更改值
Posted
技术标签:
【中文标题】NSComboBox getGet 更改值【英文标题】:NSComboBox getGet value on change 【发布时间】:2016-01-22 02:02:25 【问题描述】:我是 OS X 应用程序开发的新手。我设法构建了 NSComboBox(可选择,不可编辑),我可以在点击操作按钮时获得 indexOfSelectedItem,工作正常。
如何检测变化的价值?当用户改变他们的选择时,我应该使用什么样的函数来检测新选择的索引?
我尝试使用 NSNotification 但它没有传递新的更改值,加载时始终是默认值。是因为我把 postNotificationName 放在了错误的地方还是应该使用其他方法来获取更改的值?
我尝试搜索网络、视频、教程,但主要是为 Objective-C 编写的。我在 SWIFT 中找不到任何答案。
import Cocoa
class NewProjectSetup: NSViewController
let comboxRouterValue: [String] = ["No","Yes"]
@IBOutlet weak var projNewRouter: NSComboBox!
@IBAction func btnAddNewProject(sender: AnyObject)
let comBoxID = projNewRouter.indexOfSelectedItem
print(“Combo Box ID is: \(comBoxID)”)
@IBAction func btnCancel(sender: AnyObject)
self.dismissViewController(self)
override func viewDidLoad()
super.viewDidLoad()
addComboxValue(comboxRouterValue,myObj:projNewRouter)
self.projNewRouter.selectItemAtIndex(0)
let notificationCenter = NSNotificationCenter.defaultCenter()
notificationCenter.addObserver(
self,
selector: “testNotication:”,
name:"NotificationIdentifier",
object: nil)
NSNotificationCenter.defaultCenter().postNotificationName("NotificationIdentifier", object: projNewRouter.indexOfSelectedItem)
func testNotication(notification: NSNotification)
print("Found Combo ID \(notification.object)")
func addComboxValue(myVal:[String],myObj:AnyObject)
let myValno: Int = myVal.count
for var i = 0; i < myValno; ++i
myObj.addItemWithObjectValue(myVal[i])
【问题讨论】:
你需要实现 NSComboBoxDelegate 并使用方法comboBoxSelectionDidChange()
知道弹出列表选择改变了
顺便说一句,你应该习惯新的 Swift 循环语法。 For var 循环在 Swift3 中将不再可用 github.com/apple/swift-evolution/blob/master/proposals/…
哦,是的,我需要选择 for-in 样式。
【参考方案1】:
您需要为实现NSComboBoxDelegate 协议的组合框定义一个委托,然后使用comboBoxSelectionDidChange(_:)
方法。
最简单的方法是让您的 NewProjectSetup 类实现委托,如下所示:
class NewProjectSetup: NSViewController, NSComboBoxDelegate ... etc
然后在viewDidLoad中,还包括:
self.projNewRouter.delegate = self
// self (ie. NewProjectSetup) implements NSComboBoxDelegate
然后您可以在以下位置领取零钱:
func comboBoxSelectionDidChange(notification: NSNotification)
print("Woohoo, it changed")
【讨论】:
太棒了!我听从你的指示。它现在正在工作。我删除了“let notfication = Notification.....”,还删除了“NSNotificationCenter.defaultCenter().postNotificationName”。我使用 print("Woohoo,它改变了 (self.projNewRouter.indexOfSelectedItem)") 的输出。它现在完美。谢谢以上是关于NSComboBox getGet 更改值的主要内容,如果未能解决你的问题,请参考以下文章
NSComboBox 绑定,因此它调用 selectItematIndex 而不仅仅是显示属性值