사용자가 NSTableView에서 셀 편집을 마칠 때를 알아야합니다. 이 테이블에는 사용자 캘린더 (CalCalendarStore에서 가져온 것)가 모두 들어 있으므로 사용자의 변경 사항을 저장하려면 CalCalendarStore에 변경 사항을 알려야합니다. 그러나 사용자가 편집을 마친 후에는 아무 것도 찾을 수 없습니다. 테이블의 대리자에 메서드가있는 것 같지만 편집이 시작될 때 호출되고 편집이 끝날 때 호출되지 않습니다.사용자가 NSTableView에서 셀 편집을 완료하면 어떻게 알림을받을 수 있습니까?
답변
하위 클래스 NSTableView 및 override textDidEndEditing : (반드시 super 구현을 호출해야 함).
텍스트 필드 NSTextFieldCell 또는 NSComboBoxCell에 의해서만 호출됩니다 (단, 콤보 메뉴에서 값을 선택하는 대신 값을 변경하여 값을 변경할 때만).
NSTableDataSource 프로토콜을 살펴보십시오. 당신이 찾고있는 메시지가 호출됩니다 : tableView : setObjectValue : forTableColumn : 행 :
이 아마 정답 :
// Setup editing completion notifications NotificationCenter.default.addObserver(self, selector: #selector(editingDidEnd(_:)), name: NSNotification.Name.NSControlTextDidEndEditing, object: nil)
기능 통지를 처리한다. 즉, 셀 기반 테이블에서만 작동합니다. 뷰 기반 테이블을 사용하는 경우 해당 메소드는 절대로 호출되지 않습니다. – dgatwood
내 경우에는 작동하지 않는 것 같습니다. 내 컨트롤러 클래스를 DataSource로 테이블에 설정했지만 메서드가 호출되지 않았습니다. 데이터는 내 테이블이 NSArrayController의 값에 바인딩되어 있습니다. 왜 내 객체가 호출되지 않았을 수 있습니까? toObjectsAtIndexes : forKeyPath : 옵션 : 컨텍스트 : 당신은 또한 당신이 개체에 대한 통지되도록, 배열 자체에 대한 관찰자를 설정해야합니다
는 addObserver를 사용하여 콘텐츠 배열의 각 항목에 대한 관측을 설정 배열에 추가되거나 제거됩니다.
예를 들어 iSpend 프로젝트를 살펴보십시오.
하위 클래스 NSArrayController 및 override objectDidEndEditing : (반드시 super의 구현을 호출해야 함).
대부분이 텍스트 필드 NSTextFieldCell 또는 NSComboBoxCell에 의해서만 호출됩니다 (단, 콤보 메뉴에서 값을 선택하는 대신 값을 변경하여 값을 변경할 때만). 다른 셀을 호출 할 수있는 셀이있을 수 있지만 어느 셀이 확실하지는 않습니다. 사용자 지정 셀을 사용하는 경우 NSEditor 및 NSEditorRegistration 비공식 프로토콜을 구현하는 것이 좋습니다.
NSNotificationCenter
을 사용하거나 NSControl
방법을 사용하여 NSTableView
의 서브 클래 싱없이 동일한 결과를 얻을 수 있습니다. 여기에 애플의 문서를 참조하십시오 :
http://developer.apple.com/library/mac/#qa/qa1551/_index.html
그것은 줄의 코드 만 부부의 나를 위해 완벽했다.
당신의 delegate
될 수있는 경우 NSTableView
당신은 NSTableView
이 포함 된 NSControl
요소의 delegate
이며, 그 방법에 호출을 전송, 방법에게 사실
- (void)controlTextDidEndEditing:(NSNotification *)obj { ... }
를 구현해야
: 그delegate
그렇지 않으면
NSNotificationCenter
를 사용 (유용한 다른 방법이 있습니다) 스위프트 3에 밀리의 대답 @ 번역
// 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] }
셀 기반 뷰 기반 뷰 기반 뷰 기반 뷰 기반 테이블을 사용하는지 여부에 따라 올바르거나 잘못되었습니다. 셀 기반 테이블을 사용하고 있고 변경 내용을 쓰는 것이 목표 인 경우이 알림은 * before * tableView : setObjectValue : forTableColumn : row : 메서드가 호출되어 값을 저장하기 전에 전송되기 때문에 작동하지 않습니다. 데이터 소스이므로 이전 값을 쓸 것입니다. – dgatwood
실제로보기 기반 테이블보기에서이 알림이 전혀 표시되지 않습니다. –
:
func editingDidEnd(_ obj: Notification) {
guard let newName = (obj.object as? NSTextField)?.stringValue else {
return
}
// post editing logic goes here
}
- 1. NSTableView에서 특정 셀 비활성화
- 2. QTableWidget에서 셀 편집을 끝내라는 것을 어떻게 알 수 있습니까?
- 3. 사용자가 facebook.com에서 로그 아웃하면 어떻게 알림을받을 수 있습니까?
- 4. 사용자가 Paint.NET에서 파일 편집을 마친 것을 어떻게 알 수 있습니까?
- 5. COM에서 클라이언트가 죽으면 어떻게 알림을받을 수 있습니까?
- 6. dispatch_async 작업이 완료되면 어떻게 알림을받을 수 있습니까?
- 7. JTextPane에서 셀 편집을 중지하는 방법
- 8. NSTableView에서 스크롤
- 9. 사용자가 레코드 편집을 제한하는 방법
- 10. HTTP 처리기가 처리를 완료하면 클라이언트 측에서 어떻게 알 수 있습니까?
- 11. TCP 스트림 수신을 완료하면 어떻게 알 수 있습니까?
- 12. 아약스로드 된 콘텐츠가 이미지로드를 완료하면 어떻게 알 수 있습니까?
- 13. UIWebView가 컨텍스트로 그리기를 완료하면 어떻게 알 수 있습니까?
- 14. 사용자가 wxStyledTextCtrl을 변경할 때 알림을받을 수있는 방법이 있습니까?
- 15. 배치 파일이 Java 끝에서 실행될 때 어떻게 알림을받을 수 있습니까?
- 16. Perl에서 백그라운드 프로세스가 종료 될 때 어떻게 알림을받을 수 있습니까?
- 17. treeview (liststore) 행을 선택하면 어떻게 알림을받을 수 있습니까?
- 18. Silverlight : 요소를 이동할 때 어떻게 알림을받을 수 있습니까?
- 19. UIView가 표시 될 때 어떻게 알림을받을 수 있습니까?
- 20. 사용자가 셀 이미지를 선택하면 어떻게 변경합니까?
- 21. NSTableView에서 텍스트 필터링
- 22. 어떻게 셀 값을 변경할 수 있습니까?
- 23. FSEvents를 사용하여 폴더가 이동되었다는 알림을받을 수 있습니까?
- 24. 일부 프로세스가 시작될 때 알림을받을 수 있습니까?
- 25. 테이블보기의 확인란 셀 : 사용자가 확인할 수 없습니다.
- 26. 편집을 어떻게 설정합니까? = NO; UITextField에?
- 27. 사용자가 Exposé 모드인지 어떻게 알 수 있습니까?
- 28. 사용자가 로그인했는지 어떻게 알 수 있습니까?
- 29. 사용자가 제출 요청을하면 어떻게 알 수 있습니까?
- 30. 사용자가 Facebook에 로그인했는지 어떻게 알 수 있습니까?
그게 효과가있는 것 같습니다. 고맙습니다. :) – Andy