삭제 키를 눌러 NSTableView 행을 삭제하는 쉬운 방법을 찾고 있습니다. Google에서 검색 할 때 본 모든 답변은 http://likethought.com/lockfocus/2008/04/a-slightly-improved-nstableview/입니다. 이것은 나에게 엔지니어링 솔루션으로 보이지만 이것이 최선의 방법인지 알고 싶습니다. 어떤 사람이 더 좋은 대답을 알고 있습니까?NSTableView + Delete 키
답변
나는 LTKeyPressTableView
과 비슷한 것을 구현했습니다. 그러나 배열 컨트롤러를 사용하므로 서브 클래스에 IBOutlet NSArrayController * relatedArrayController
을 추가했습니다. Delegate에서 삭제 요청을 처리하는 대신, 하위 클래스가 Delete 키 처리를 추가적으로 다루기 때문에 하위 클래스에서 직접 삭제 요청을 처리합니다. 키를 삭제하기 위해 keypress를 감지하면, 나는 단지 [relatedArrayController delete:nil];
으로 전화하고 있습니다.
#import "IRTableView.h"
@implementation IRTableView
- (void)keyDown:(NSEvent *)event
{
// Based on LTKeyPressTableView.
//https://github.com/jacobx/thoughtkit/blob/master/LTKeyPressTableView
id delegate = [self delegate];
// (removed unused LTKeyPressTableView code)
unichar key = [[event charactersIgnoringModifiers] characterAtIndex:0];
if(key == NSDeleteCharacter)
{
if([self selectedRow] == -1)
{
NSBeep();
}
BOOL isEditing = ([[self.window firstResponder] isKindOfClass:[NSText class]] &&
[[[self.window firstResponder] delegate] isKindOfClass:[IRTableView class]]);
if (!isEditing)
{
[relatedArrayController remove:nil];
return;
}
}
// still here?
[super keyDown:event];
}
@end
최종 결과가 나에게 아주 IB 친화적이며, 코코아 바인딩 + 코어에서 사용하기에 아주 간단한 해결책 :
IRTableView.h :
#import <Cocoa/Cocoa.h>
@interface IRTableView : NSTableView {
IBOutlet NSArrayController * relatedArrayController;
}
@end
및 IRTableView.m 데이터 응용 프로그램.
일반적으로하는 일은 응용 프로그램의 메뉴 표시 줄에 새 메뉴 항목을 만드는 것입니다. 뭔가 같이 :
File -> Delete ${Name of Item}
그런 다음 앱 위임 또는 다른 컨트롤러 중 하나에 어딘가에 정의 된 IBAction를 방법을 가리 키도록 인터페이스 빌더에서 그 NSMenuItem
를 연결할 수 있습니다. 이 메소드를 구현하면 모델에서 항목이 삭제되고 NSTableView
을 새로 고쳐야합니다.
- 당신은 항목을 인터페이스 빌더에서 키보드 단축키를 제공 할 수 있습니다 :는
조치를 벗어난
NSMenuItem
를 만들기의 장점은 것입니다. (삭제 키와 같습니다.) - 애플리케이션에 익숙하지 않거나 삭제 키를 누르거나 키보드를 사용할 수없는 사용자는이 기능을 계속 사용할 수 있습니다.
10.10 이후 NSViewController는 응답 체인의 일부입니다. 그래서 가장 쉬운 방법은 서브 클래 싱 된 NSViewController에 keyDown을 구현하는 것입니다.
서브 클래스를 피하기 위해 응답 체인을 사용하는 것이 좋은 점입니다 (가능한 경우). –
keyDown
을 서브 클래스 화하고 NSViewController
에 잡을 필요가 없습니다.
메뉴 Edit
의 Delete
메뉴 항목이 First Responder의 선택자 delete:
에 연결되어 있습니다. Delete
메뉴 항목이 없으면 하나 만들고이를 첫 번째 응답자 (빨간색 큐브)의 delete:
에 연결하십시오.
IBAction
방법을 구현 뷰 컨트롤러에서Delete
메뉴 항목 (⌫ 또는 ⌘⌫)에 해당하는 키를 할당
스위프트 :
@IBAction func delete(_ sender: AnyObject)
Objective- C :
-(IBAction)delete:(id)sender
을 입력하고 테이블 뷰 행을 삭제하는 로직을 입력하십시오.
- 1. stepToTap KIF로 ipad 키보드의 DELETE 키
- 2. NSArrayController를 사용하는 Sectioned NSTableView
- 3. 투명한 NSTableView
- 4. NSTableView Troubles
- 5. NSTableView 인쇄하기
- 6. CASCADE DELETE 규칙을 사용해야합니까?
- 7. Postgres 외래 키 'on update'및 'delete on'옵션은 어떻게 작동합니까?
- 8. ON DELETE CASCADE로 외래 키 제약 조건을 업데이트하지 않습니까?
- 9. NSTableView 정렬 문제 (KVC 사용)
- 10. NSPopover 및 NSTableView 셀
- 11. NSTableView 둥근 모서리
- 12. NSTableView 사용 예
- 13. NSTableView NSView에 셀 드래그
- 14. NSDrawer의 NSTableView 문제
- 15. NSTableView 새로 고치지 않음
- 16. 회색 NSTableView ㅣ iTunes
- 17. NSTableView 스위치 열
- 18. NSTableView 선택 및 하이라이트
- 19. NSCollectionViewItem의 인스턴스에서 NSTableView 업데이트
- 20. NSTableView 화살표 키로 이동
- 21. plist 파일이있는 NSTableView
- 22. NSTableView 보장 데이터 표시
- 23. NSArray를 사용하는 NSTableView 행
- 24. NSTableView with custom NSColumnHeaderCell
- 25. NSTableView 업데이트/다시로드 문제
- 26. NSTableView - 행 선택 비활성화
- 27. 여러 열이있는 NSTableView
- 28. NSTableView 정렬이 올바르지 않습니다.
- 29. 가변 배열에서 NSTableview 채우기
- 30. UITableView 형 NSTableView
안녕하세요, Craig. 당신의 대답은 내가 정말로 기대했던 것이 아니지만 꽤 좋은 것처럼 들립니다! = D 대단히 감사합니다. – Leandro
하하 음, 처음에는 꽤 간접적 인 접근 방법 인 것처럼 보이지만, 매우 잘 작동하며 많은 두통을 처리합니다. –
두 테이블 뷰가 없다면 ... – peetonn