2012-05-24 73 views
2

我有一個NSComboBox的數據源,它完美地工作,當你點擊三角形,並通過單擊它選擇一個項目。不過,我也希望它允許用戶使用自動完成鍵入框來選擇名稱。目前,當用戶鍵入時,我希望選擇自動完成的項目,但不選擇。NSComboBox代理

我的想法是我應該實現一個委託方法,以便當用戶在組合框中鍵入並且選擇項目名稱autocompletes時,讓組合框運行該方法,然後從彈出框中選擇相同名稱的項目up list。

我實現了這個代表團方法:

- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor { 

    NSString *tempString = [outletPerformanceVenue stringValue]; 

    NSLog(@"New Value = %@",tempString); 

    [outletPerformanceVenue selectItemWithObjectValue:tempString]; 

    return TRUE; 
} 

不過,我收到以下編譯器錯誤:

*** -[NSComboBoxCell selectItemWithObjectValue:] should not be called when usesDataSource is set to YES 

似乎相當直接的,但讓我知道...這將是最好的選擇項目的方式?我應該確定包含此名稱的數據源數組中的記錄索引,然後使用相同的索引選擇組合框項目?還是有更直接的方法?

*編輯*

一個更簡單更直接的問題可能是:

如果(而不是從下拉列表中選擇)用戶鍵入項目的名稱爲組合框。如何在使用數據源時從組合框中檢索該項目的索引?

要雪上加霜的是,蘋果的文檔說selectItemWithObjectValue:應與內部或外部數據源的工作......每這裏:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ComboBox/Tasks/SettingComboBoxValue.html

+0

你有沒有想過這件事的運氣? – Kyle

回答

3

簡短的回答:使用selectItemAtIndex方法,或撥打setStringValue: (NSComboBox繼承自NSTextField),如果你真的想使用一個字符串。

只是爲了完整性:我來到這裏是因爲一個相關但略有不同的問題。

我只會解釋我是如何構建我的組合框的。我不確定這是否適用於您的情況,但我希望它可以幫助某人。

我實現了DataSource方法來完成工作,但讓綁定完成了實際設置值的工作。通過這種方式,按下return可以自動完成項目到其中一個選項,或者在沒有可用的自動補全的情況下創建一個新值。這些綁定只是關心設置和獲取價值。