我需要知道用戶何時完成編輯NSTableView中的單元格。該表格包含所有用戶的日曆(從CalCalendarStore獲取),因此爲了保存用戶的更改,我需要將更改通知CalCalendarStore。然而,在用戶完成編輯之後,我找不到任何被調用的東西 - 我猜想在表格的委託中會有一個方法,但我只看到一個在編輯開始時被調用,而不是在編輯結束時被調用。當用戶完成編輯NSTableView中的單元格時,如何得到通知?
回答
子類NSTableView並覆蓋textDidEndEditing :(確保調用super的實現)。
這隻會被文本字段NSTextFieldCell或NSComboBoxCell調用(但只能通過鍵入值來更改值,而不是通過從組合菜單中選擇值)。
看看NSTableDataSource協議。您正在查找的消息被稱爲:tableView:setObjectValue:forTableColumn:row:
這可能是正確的答案。這就是說,它只適用於基於單元格的表格。如果您使用的是基於視圖的表格,則永遠不會調用該方法。 – dgatwood 2014-09-20 04:29:14
這似乎不適用於我的情況。我將我的控制器類設置爲表的DataSource,但該方法從未被調用過。數據是我的表綁定到NSArrayController中的值 - 這可能是爲什麼我的對象不被調用? toObjectsAtIndexes:forKeyPath:選項:背景:
您還需要設置陣列本身的觀察者,這樣你就會得到通知的對象
使用的addObserver設置觀察員內容陣列中的每個項目添加到陣列或從陣列中刪除。例如iSpend項目。
子類NSArrayController並重寫objectDidEndEditing :(確保調用super的實現)。
這通常只會被文本字段NSTextFieldCell或NSComboBoxCell調用(但只有通過鍵入值來更改值,而不是通過從組合菜單中選擇值)。可能有其他幾個單元格會調用它,但我不確定哪些單元格。如果你有一個自定義單元,那麼就考慮實現NSEditor和NSEditorRegistration非正式協議。
通過使用NSNotificationCenter
或使用NSControl
方法,可以實現相同的結果,而無需對NSTableView
進行分類。看到這裏的蘋果文檔:
http://developer.apple.com/library/mac/#qa/qa1551/_index.html
這只是一個幾行代碼,並完美地爲我工作。
如果你可以的delegate
的NSTableView
你只需要實現方法
- (void)controlTextDidEndEditing:(NSNotification *)obj { ... }
事實上,NSTableView
是它所包含的NSControl
元素的delegate
,並轉發這些方法調用其delegate
(還有其他方法是有用的)
否則,使用NSNotificationCenter
:
// where you instantiate the table view
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(editingDidEnd:)
name:NSControlTextDidEndEditingNotification object:nil];
// somewhere else in the .m file
- (void)editingDidEnd:(NSNotification *)notification { ... }
// remove the observer in the dealloc
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self
name:NSControlTextDidEndEditingNotification object:nil];
[super dealloc]
}
嗯,這是對還是錯,取決於你使用的是基於單元格還是基於視圖的表格。如果您使用的是基於單元格的表格,並且您的目標是寫出更改,則此方法不起作用,因爲此通知在* tableView:setObjectValue:forTableColumn:row:方法被調用以將值存儲數據源,所以你會寫出舊的值。 – dgatwood 2014-09-20 04:25:53
翻譯@米莉的回答爲斯威夫特3:
// Setup editing completion notifications
NotificationCenter.default.addObserver(self, selector: #selector(editingDidEnd(_:)), name: NSNotification.Name.NSControlTextDidEndEditing, object: nil)
函數來處理通知:
func editingDidEnd(_ obj: Notification) {
guard let newName = (obj.object as? NSTextField)?.stringValue else {
return
}
// post editing logic goes here
}
- 1. Mac Objective C NSTableView和NSTextViewCell,知道用戶編輯單元格時完成
- 2. 當用戶完成編輯datagridview中的單元格時檢測
- 3. 編輯時更改NSTableView單元格值
- 4. 當用戶雙擊可編輯的單元格時,如何獲得nstableview發送操作
- 5. ABPersonViewController完成編輯通知
- 6. 當NSSpeechSynthesizer完成發言時,我該如何得到通知?
- 7. 如何在「添加帳戶」活動完成時得到通知
- 8. 如何在編輯NSTableView中的單元格後保留字段編輯器?
- 9. 選擇封裝NSTableView單元格時收到通知?
- 10. enumerateLinesUsingBlock完成時如何獲得通知
- 11. NSTableView的製作單元編程編輯
- 12. NSTableView可編輯標題並在表格中雙擊單元格
- 13. 當編輯單元格時行刷新
- 14. 當用戶試圖編輯它時,驗證DataGridView單元格
- 15. 如何知道用戶何時在Paint.NET中完成編輯文件?
- 16. 用戶在TStringGrid中編輯單元格
- 17. 如何在NSTableView中重用單元格?
- 18. 如何將NSTableView單元格添加到單元格的填充?
- 19. 在編輯之前更改NSTableView中的單元格內容
- 20. NSTableView如何點擊單元格中的任何位置來編輯文本?
- 21. 如何停止JTextPane中的單元格編輯,JTable的單元格編輯器
- 22. Tk Tablelist,如何找到當前正在編輯的單元格
- 23. 如何編輯datgridview中的單元格?
- 24. 當試圖編輯QTableView中的單元格時調用QFileDialog
- 25. 如何在ThreadPool完成時得到通知?
- 26. 如何在glTexImage2D完成上傳時得到通知?
- 27. iOS - 如何在AFHTTPClient完成所有操作時得到通知
- 28. 當客戶沒有在Paypal中完成付款時的通知
- 29. 如何在離開單元格時提交單元格編輯
- 30. 當以編程方式選擇單元格時通知UITableViewController
看起來它會起作用。非常感謝你。 :) – Andy 2008-10-12 12:56:46