2012-05-05 91 views
0

注意:Andrew的響應讓我再次看了一眼。這個特性深埋在內部定時器的大型應用中。如果該計時器是off我得到這裏描述的錯誤行爲。如果定時器事情按預期工作。我不知道爲什麼這個計時器會與這個表格視圖交互,但正如我所說的那樣,這是一個龐大複雜的應用程序。從NSTableView中刪除列及其標題

我希望用戶能夠選擇顯示哪些列。他將看到一組單選按鈕或複選框,其中一個用於顯示對象中的每個按鍵。他可以選中或取消選中一個框,NSTableView將添加或刪除該鍵的列。

顯示的對象是一個NSDictionary。直到運行時才知道字典的關鍵字,所以我必須在運行時創建帶有標識符的列......它們在編譯時不知道。

實現添加功能很順利。我創建一個列和一個標題單元格,將標題單元格的文本設置爲某個值。但刪除並不那麼容易。 [myTableView removeTableColumn:col]刪除列,但沒有很好地處理標題。有時標題文本不會被刪除。有時兩列中的標題文本被刪除。有時候我最終會得到兩個打印在一起的標題文本字符串。

顯然我錯過了一些東西。如何以編程方式刪除列及其標題?

+0

刪除列也應該可靠地刪除標題及其文本。你能發佈更多的代碼嗎,或者更好的,提供一個暴露問題的示例項目? –

+0

我有一個這個功能的應用程序。基本上你可以創建所有列的表格。然後在運行時您可以更改列的可見性,所以您實際上不會添加或刪除列......只是使其可見或不可見。 – regulus6633

回答

1

通過從複選框選擇器調用這兩種方法很容易實現。

要添加列動態,你應該把這個:

- (void)addColumnWithCheckboxToTable:(NSTableView *)table :(NSString *)header 
{ 
    NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:header]; 
    [[column headerCell] setStringValue:header]; 

    // Add column to table 
    [table addTableColumn:column]; 
} 

,並刪除列調用這一個:

- (void)removeColumnWithCheckboxFromTable:(NSTableView *)table :(NSString *)header 
{ 
    NSTableColumn *column = [table.tableColumns objectAtIndex:[table columnWithIdentifier:header]]; 
    [table removeTableColumn: column]; 
} 
0

我有點晚了這個線程,但我最近碰到過一個非常相似的情況。

事實證明,在我修改主線程中的NSTable結構的情況下,一切都很好。有時雖然修改發生在另一個線程上,導致了上述問題。

像往常一樣,修改UI的所有代碼應該在主線程上,所以修復相對簡單:讓所有代碼都在主線程上運行。