2013-05-02 66 views
1

我想要一個帶有1個字符串列的簡單表格,通過使用返回鍵添加一個新行。 另外我想刪除一行,如果用戶也清除特定行上的文本。NSTableView通過清除文本刪除行

我已經成功地添加一個新行用這個方法返回鍵:

-(BOOL)control:(NSControl*)control textView:(NSTextView*)textView doCommandBySelector:(SEL)commandSelector{ 
if (commandSelector == @selector(insertNewline:)) { 
    [self returnKey]; 
    return YES; 
} 
else if(commandSelector == @selector(moveUp:)){ 
    [self tableMoveUp]; 
    return YES; 
} 
else if(commandSelector == @selector(moveDown:)){ 
    [self tableMoveDown]; 
    return YES; 
} 
else{ 
    NSLog(@"%@", NSStringFromSelector(commandSelector)); 
} 

return NO; 

}

問題是刪除行,當用戶清除上一個行的文本和打返回鍵。在將表上的實際更改保存到數據源之前調用此方法。我試過在這樣的列上獲取dataCell:

NSTextFieldCell *cell = [self.tableView.tableColumns[0] dataCell]; 
NSLog(@"%@",cell.stringValue); 

但是stringValue不準確。 關於如何實現這一點的任何想法? 謝謝!

回答

0

由於表格列的數據單元被重複用於每一行(設置它的值並在繪圖,泡沫,沖洗,重複時將其「設置」),這是放置這種類型代碼的奇怪之處。 「stringValue不準確」的觀察是一個很大的線索 - 它將被設置爲單元格上次繪製的任何值,而不能也不應該被確定。

爲什麼不讓數據源管理它?當-tableView:setObjectValue:forTableColumn:row:被調用時,檢查obj是否爲空string/nil/whatever,然後移除該行並重新加載。 「清空這個單元格」是一個用戶操作;表視圖處理它,並讓其數據源(一個控制器)知道用戶何時承諾進行更改。

如果您想讓「刪除/退格刪除行」,然後自定義NSTextFieldCell發送一個「MyTableRowWasDeleted」通知,您的數據源可以觀察該通知,並採取適當的步驟結束編輯並刪除「空行」然後重新加載。