2011-08-17 36 views
5

我目前正在嘗試在我的Cocoa應用程序中使用新的基於視圖的NSOutlineView。由於我沒有使用綁定,所以我在我的控制器中實現了所有必需的委託和數據源方法。基於視圖的NSOutlineView標題單元格字體問題

在Interface Builder我添加了一個NSOutlineView設置爲SOURCELIST並設置爲查看基於內容模式突出顯示。因此,有提供兩個缺省表格單元視圖(與HeaderCell集作爲標識符和與DATACELL組作爲標識符的一個數據小區的一個標題單元格)

這就是它看起來像在界面生成器,頭單元格的觀點正確顯示灰藍色的TextField而數據單元的觀點具有圖像視圖和文本字段與正確顏色和字體設置

爲了提供的意見,我使用下面的代碼,返回一個DataCell-視圖或HeaderCell視圖和集合根據界面生成器中設置的相應標識符,相應單元格的textField。

- (NSView *)outlineView:(NSOutlineView *)outlineView 
    viewForTableColumn:(NSTableColumn *)tableColumn 
        item:(id)item { 


    NSTableCellView *result = nil; 

    if ([item isKindOfClass:[NSMutableDictionary class]]) { 
     result = [outlineView makeViewWithIdentifier:@"HeaderCell" owner:self]; 

     id parentObject = [outlineView parentForItem:item] ? [outlineView parentForItem:item] : groupedRoster; 
     [[result textField] setStringValue:[[parentObject allKeys] objectAtIndex:0]]; 


    } else { 
     result = [outlineView makeViewWithIdentifier:@"DataCell" owner:self]; 

     [item nickname] ? [[result textField] setStringValue:[item nickname]] : [[result textField] setStringValue:[[item jid] bare]]; 
    } 
    return result; 
} 

運行它看起來如下所示。

任何人都可以提供提示,爲什麼選擇時標題單元既不是粗體也不是正確的顏色?

回答

11

您需要實現-outlineView:isGroupItem:delegate方法併爲您的標題行返回YES。這將標準化字體並用右側的顯示/隱藏按鈕替換左邊的顯示三角形。您仍然需要手動大寫字符串以獲得完整效果。

我不確定上面的組行代理方法是否使選擇樣式看起來不錯。但是,通常不希望標題行在源列表中完全可選,通過-outlineView:shouldSelectItem:delegate方法返回NO。

+1

很好,謝謝發現,這正是我一直在尋找。如果有人遇到問題,請根據[本文](http:// stackoverflow。)展開和摺疊時使用setFloatsGroupRows:NO來防止第一個組項目*跳躍*上下。COM /問題/ 6814620 /奇怪的行爲 - 使用 - 視圖 - 基於nsoutline-SOURCELIST) – BinaryBucks

+0

雖然我現在它是一切正確顯示上面的代碼工作並沒有真正流利工作展開/摺疊一羣喜歡它,當是例如發現者。在動畫中總會有輕微但明顯的停頓,並且CPU負載很重,就好像視圖是新分配的一樣。如果我只用一個標識符來使用makeViewWithIdentifer,那麼每個單元格都是一個標題單元格(或數據單元格,它不會馬上),一切都很流暢。任何暗示爲什麼? – BinaryBucks

+0

是的,整個floatsGroupRows屬性剛剛爲大綱視圖斷開。沒有看到你描述的性能問題。也許是來自層級支持的超級視圖的Core Animation迴歸?不知道。 –

2

我創建了一個包含源列表的小示例項目,並且還使用了@ boaz-stuller建議的-outlineView:isGroupItem:方法。

  • 顯示項目的列表
  • 編輯在一個主 - 從時尚的項目
  • 刪除和添加項目
  • 綁定在github

退房besi/mac-quickies的用法。 大部分的東西在IB:做或可以在AppDelegate

screenshot

相關問題