2008-12-09 69 views
5

我需要使用NSBrowser中的當前選定路徑來更新NSPathControl,但是我很難找出一種獲取通知的方式路徑已經從NS瀏覽器改變了。這樣做的理想方法就是觀察NSBrowser中的路徑關鍵路徑,但是這給出了一個KVO只能觀察返回無效消息且沒有更新(setPath返回一個bool成功值)的方法<key>我該如何讓NSPathControl在NSBrowser中更新選定單元格的路徑

我也嘗試過觀察selectedCell鍵路徑,但是當選擇發生改變時我沒有收到通知。

有沒有其他一些真正明顯的方法來做到這一點,我失蹤了?

回答

7

Cocoa Dev羅布Keniger過的禮貌:

你看着在/開發/例子的SimpleBrowser 例子嗎?它 顯示當用戶改變, 基本上是剛剛建立NSBrowser的 行動如何獲得當前選擇 。

確實是這樣做的。只是實現一個 - (空)broswerClicked:方法(包括映射它在Interface Builder)任何你想要的每一次發生的方法中選擇的變化,例如

- (void)browserClicked:(id)browser { 
    self.pathToSelectedCell = [browser path]; // NSPathControl is bound to pathToSelectedCell 
} 
+3

嘿,那就是我:-) – 2009-01-09 05:55:49

0

我剛剛在IB中檢查過,它看起來像NSBrowser有一個選擇索引路徑綁定(NSIndexPath對象數組),你可以用KVO監視。這很奇怪,但我沒有在文檔中看到任何提及,所以你可能需要做一些研究,看看你應該或不應該使用哪些東西,即使它看起來有效。如果確實如此,則在您的KVO觀察方法中,您可以找到瀏覽器的當前路徑,並將其轉換爲路徑控件可以使用的NSURL。

如果沒有在那裏工作也委託方法- (BOOL)browser:(NSBrowser *)sender selectRow:(NSInteger)row inColumn:(NSInteger)column- (BOOL)browser:(NSBrowser *)sender selectCellWithString:(NSString *)title inColumn:(NSInteger)column

+0

即委託方法不幸僅被調用響應於selectRow:inColumn:正在發送到瀏覽器。 如果我成立了一個結合選擇指數路徑,則NSBrowser委託方法似乎不再被調用,使得它讓我無法設置我的瀏覽器。 – 2008-12-10 00:15:32

0

作爲10.6,人們可以找出選擇哪些項目,通過使用委託回調如下:

- (NSIndexSet *)browser:(NSBrowser *)browser selectionIndexesForProposedSelection:(NSIndexSet *)proposedSelectionIndexes inColumn:(NSInteger)column 
{ 
    NSLog(@"New first item of the new selection is at index %@", [proposedSelectionIndexes firstIndex]); 
    // Do something with the selected index or indicies 
    return proposedSelectionIndexes; // Allow the selection to occur by not changing this 
} 
相關問題