我已经有一段时间了.我认为这应该是一件容易的事,但不是= D
我想要做的是,当用户点击组合框时显示组合框的列表,但不是在按钮中特别显示.
任何的想法?提前致谢!
如何制作一个带有部分和图标的NSComboBox,就像 Xcode 的图像选择器一样?
对于我的生活,我一直被困扰着NSComboBox.
我创建了一个符合NSComboBoxDataSource协议的对象,并实现了:
- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox;
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index;
Run Code Online (Sandbox Code Playgroud)
我将my的实例设置NSComboBox为使用数据源,并将此对象设置为源.这很好用,我的实现返回项目数,并返回NSString特定索引处项目的值.
然后我决定在选择某些东西时我想做点什么,这就是我的问题开始的地方.在NSComboBoxDataSource协议中没有明显的方法可以覆盖组合框中的项目选择.
所以,我也有我的对象符合NSComboBoxDelegate并实现:
- (void)comboBoxSelectionDidChange:(NSNotification *)notification;
Run Code Online (Sandbox Code Playgroud)
不幸的是,与NSTableView选择不同,通知的对象NSComboBox不是所选项目的对象."很好"我告诉自己,我会称之为NSComboBox方法:
- (id)objectValueOfSelectedItem;
Run Code Online (Sandbox Code Playgroud)
这应该返回选中的项目,我可以从那里开始.但是,只有当usesDataSource设置为时,才会调用该方法NO,这不是我的情况.我使用它时警告开始飞行.
所以,我的问题是,NSComboBox在使用数据源时处理选择的正确方法是什么?
我正在使用NSComboBox的这个通知.唯一的问题是当我在下拉列表中选择不同的项目时,它总是在组合框中显示先前选择的值.如何获取当前选定的值.我需要根据值进行一些控制启用/禁用.
- (void)comboBoxSelectionDidChange:(NSNotification *)notification {
NSComboBox *comboBox = (NSComboBox *)[notification object];
NSLog(@"[comboBox stringValue] : %@", [salaryBy stringValue] );
}
Run Code Online (Sandbox Code Playgroud) 使用此代码,我可以在 中填充项目NSComboBox,但是当您在应用程序中展开组合框时,组合框本身始终为空。
记录的项目数是准确的。我知道这是相当基本的,但我已经阅读并重新阅读了 developer.apple.com 上的文档,并在 Swift 中寻找组合框的示例无济于事,这让我感到非常惊讶。
@IBOutlet var someComboBox: NSComboBox!
override func viewDidLoad() {
super.viewDidLoad()
someComboBox = NSComboBox()
someComboBox.addItemWithObjectValue("Foo")
someComboBox.addItemWithObjectValue("Bar")
someComboBox.addItemWithObjectValue("Baz")
println(someComboBox.numberOfItems)
}
Run Code Online (Sandbox Code Playgroud)
结果:

假设我有一个NSObject代表一个国家的子类,例如
@interface CountryInfo : NSObject
@property (nonatomic, retain) NSString *countryName;
Run Code Online (Sandbox Code Playgroud)
我的模型包含NSMutableArray的CountryInfo秒.我想将数组绑定到NSComboBox.组合框应显示国家/地区名称,并允许用户选择国家/地区.
所以,我像这样设置我的.xib:
CountryArrayController(NSArrayController)
ContentArray
NSComboBox
内容
内容价值
到现在为止还挺好.现在,如何绑定的价值的NSComboBox?文件说明:
"An NSString or NSNumber that specifies the value of the NSComboBox."
Run Code Online (Sandbox Code Playgroud)
这是什么意思?我注意到我可以将它绑定到NSString我的模型上,它将反映所选的countryName.但我想绑定到CountyInfo对象本身!无论是直接,还是通过绑定到我的阵列控制器上的选择:我该如何设置它?
我正在Xcode5中为MacOS X开发一个应用程序
我想在用户输入或删除文本时在文本字段上键入自动填充选项,例如,如果用户键入"Me",那么墨西哥选项会显示在选项列表中,到目前为止这是我的代码:
@interface ComboNSObject()<NSComboBoxCellDataSource, NSComboBoxDataSource, NSComboBoxDelegate>{
NSArray *datos;
}
@property (weak) IBOutlet NSComboBox *myCombo;
@end
@implementation ComboNSObject
-(void)awakeFromNib{
datos = [[NSArray alloc]initWithObjects:@"Mexico",@"Guatemala",@"USA",@"Chile",@"Argentina", nil];
[_myCombo addItemsWithObjectValues:datos];
}
- (NSString *)comboBox:(NSComboBox *)comboBox completedString:(NSString *)partialString
{
for (NSString *dataString in datos) {
NSLog(@"encontrado: %@", [dataString commonPrefixWithString:partialString options:NSCaseInsensitiveSearch]);
}
return @"";
}
@end
Run Code Online (Sandbox Code Playgroud)
我已经在我的NSObjectController上设置了_myCombo的委托和数据源以及它的NSComboBoxCell,但没有任何反应,显示我的自动完成的正确代码是什么
NSComboBox 中有用于项目选择的 IBAction 吗?
我尝试定义 2 个不同的操作 - 一个用于从下拉框中选择的项目,另一个用于输入新值的操作。那可能吗?
*我正在做一个Mac应用程序,而不是iOS
我有一个NSComboBoxCell,允许用户从列表中选择一个项目,但目前它还允许用户键入他们想要的值.我无法找到一种方法来使用户无法输入组合框(我只是希望他们能够选择列表中的内容).这看起来应该相对简单(甚至是界面构建器选项),但如果是这样,我完全看不起它.有任何想法吗?
注意:这适用于OSX,而不适用于iOS.
macos user-interface objective-c interface-builder nscombobox
在 Cocoa UI 控件中,我们有NSComboBox,我想知道是否可以将其设置为像 Apple 在 OSX 系统偏好设置中使用的“组合框”一样。这些是完全可点击的(而不仅仅是最右边的箭头部分),并且它们的外观和行为也略有不同(例如,它们延伸到底部和顶部)。
是否可以NSComboBox更改为这样的行为,或者这是苹果在那里使用的完全不同的控件?
我是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 …Run Code Online (Sandbox Code Playgroud) nscombobox ×11
cocoa ×7
macos ×6
objective-c ×4
swift ×2
appkit ×1
autocomplete ×1
binding ×1
ibaction ×1