Tôi đang tìm một giải pháp dễ dàng để xóa các hàng NSTableView bằng cách nhấn phím xóa. Tất cả những gì tôi đã thấy khi tìm kiếm trong Google là các câu trả lời như thế này: http://likethought.com/lockfocus/2008/04/a-slightly-improved-nstableview/. Điều này dường như với tôi một giải pháp kỹ thuật, nhưng tôi muốn biết nếu đây là cách tốt nhất. Có ai biết câu trả lời hay hơn không?NSTableView + Xóa khóa
Trả lời
Tôi đã triển khai một cái gì đó tương tự như LTKeyPressTableView
. Tuy nhiên, tôi sử dụng bộ điều khiển mảng, vì vậy trong phân lớp của tôi, tôi đã thêm IBOutlet NSArrayController * relatedArrayController
. Thay vì xử lý yêu cầu xóa trong một đại biểu, tôi xử lý nó trực tiếp trong phân lớp vì lớp con của tôi đặc biệt đề cập đến việc thêm xử lý khóa Delete. Khi tôi phát hiện phím bấm để xóa, tôi chỉ cần gọi [relatedArrayController delete:nil];
.
IRTableView.h:
#import <Cocoa/Cocoa.h>
@interface IRTableView : NSTableView {
IBOutlet NSArrayController * relatedArrayController;
}
@end
và IRTableView.m:
#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
Kết quả cuối cùng là khá IB thân thiện đối với tôi, và một giải pháp khá đơn giản để sử dụng trong một Cocoa Bindings + Lõi Ứng dụng dữ liệu.
Điều tôi thường làm là tạo một mục menu mới trong thanh menu của ứng dụng. Một cái gì đó như:
File -> Delete ${Name of Item}
Sau đó, bạn có thể liên kết mà NSMenuItem
trong Interface Builder để trỏ đến một phương pháp IBAction định nghĩa ở đâu đó trên một trong hai đại biểu ứng dụng của bạn hoặc một số điều khiển khác. Việc triển khai phương pháp này sẽ xóa mục khỏi mô hình của bạn và làm mới NSTableView
.
Ưu điểm để làm cho một NSMenuItem
ra khỏi hành động là:
- Bạn có thể cung cấp cho các mục phím tắt trong giao diện Builder. (Giống như phím xóa.)
- Người dùng không quen với ứng dụng của bạn, ngại nhấn phím xóa hoặc không có quyền truy cập bàn phím vì bất kỳ lý do nào, vẫn có thể sử dụng chức năng này.
Sau 10.10, NSViewController là một phần của chuỗi phản hồi. Vì vậy, cách dễ nhất là triển khai keyDown trong NSViewController được phân lớp của bạn
Điểm tốt về việc sử dụng chuỗi trả lời để tránh phân lớp phụ (nếu có thể). –
Không cần phải phân lớp và bắt giữ keyDown
trong NSViewController
.
Mục menu Delete
trong menu Edit
được kết nối với công cụ chọn delete:
của Responder đầu tiên. Nếu không có mục menu Delete
, hãy tạo một mục và kết nối nó với delete:
của Trình trả lời đầu tiên (khối màu đỏ).
- Gán một tương đương chìa khóa dẫn đến mục
Delete
menu (⌫ hay ⌘⌫) Trong điều khiển xem thực hiện các phương pháp
IBAction
Swift:
@IBAction func delete(_ sender: AnyObject)
Objective- C:
-(IBAction)delete:(id)sender
và đặt vào logic để xóa (các) hàng xem bảng.
- 1. Kéo ra khỏi NSTableView để xóa
- 2. Khóa và xóa
- 3. Node_redis - cách xóa khóa?
- 4. NSTableView makeViewWithIdentifier qua ngòi
- 5. Ẩn tiêu đề NSTableView?
- 6. Sắp xếp NSTableView
- 7. Hoạt hình các hàng trong một NSTableView
- 8. Xóa khóa chính trong datatable
- 9. Xóa Khóa trong Oracle 10
- 10. Xem NSTableView/NSOutlineView và isGroupItem
- 11. Làm cách nào để xóa tất cả các mục khỏi NSTableView do NSArrayController kiểm soát?
- 12. Thay đổi màu phân cách thành nền hoặc xóa màu khỏi NSTableView
- 13. làm cách nào để xóa không gian giữa các ô của NSTableView?
- 14. Xóa Khóa khỏi Từ điển bằng tên khóa
- 15. Xóa khóa khỏi mảng kết hợp
- 16. Xóa nhiều khóa từ Python dict
- 17. Xóa khóa khỏi bản đồ C++
- 18. Xóa hàng với khóa ngoại trong PostgreSQL
- 19. TFS xóa khóa của người dùng khác
- 20. IntegrityError: vi phạm khóa ngoài khi xóa
- 21. JSON serialization - xóa các khóa rỗng
- 22. NSTableView - Vô hiệu hoá lựa chọn hàng
- 23. NSTableView và NSOutlineView drag-and-drop
- 24. NSTableView với các ô tùy chỉnh
- 25. Tô màu một hàng trong một NSTableView
- 26. Xem dựa trên NSTableView với các mục
- 27. NSTableView của tôi ở đâu trong NSScrollView?
- 28. Bộ lọc NSTableView dựa trên chế độ xem + hoạt ảnh
- 29. Mục nhập bộ nhớ cache bị khóa đã bị xóa. Trong số các khóa mở khóa/mở khóa số dư?
- 30. "Tổng số khóa vượt quá kích thước bảng khóa" Xóa 267 Bản ghi
Xin chào, Craig. Câu trả lời của bạn không phải là những gì tôi đã thực sự mong đợi, nhưng nó có vẻ khá tốt! = D Cảm ơn bạn rất nhiều. – Leandro
Haha yea, lúc đầu nó có vẻ giống như một cách tiếp cận khá gián tiếp, nhưng nó hoạt động rất tốt, và chăm sóc rất nhiều nhức đầu. –
trừ khi bạn có hai chế độ xem bảng ... – peetonn