2013-02-02 29 views
6

Tôi đang cố gắng tạo một NSTableView đơn giản (chỉ văn bản), nơi các lần xem ô có thể được nhấp vào để chỉnh sửa văn bản. Tất cả các hướng dẫn và câu hỏi liên quan ở đây cho thấy rằng đây là hành vi tự động, nhưng tôi không thể có được nó.Không thể chỉnh sửa NSTableView bằng cách nhấp vào

Tôi không gặp khó khăn khi liên kết đại biểu và nguồn dữ liệu của mình; Tôi có thể điền tất cả các ô theo lập trình và tôi có thể tìm ra những gì cần làm với văn bản mới được nhập khi chỉnh sửa. ... Tôi không thể mở hộp văn bản để chỉnh sửa!

(Các cột NSTable được đánh dấu là có thể chỉnh sửa được trong IB)

Cảm ơn bạn đã tìm mọi đầu mối.

+0

OK, không có câu trả lời, nhưng ai có thể khẳng định rằng ít nhất này _should_ thể, bấm/DoubleClick một ô trong một NSTableView mở ra trường text để chỉnh sửa? Tôi bắt đầu tự hỏi nếu cài đặt Xcode của tôi bị hỏng. Trong mọi hướng dẫn tôi có thể tìm thấy, đây là hành vi bình thường mà không giải thích cách tạo ra nó. Cảm ơn. –

+1

Hóa ra đó không phải là hành vi mặc định, cũng như không thể thiết lập trên toàn cầu trong IB. Bạn phải tự mã hóa mỗi ô để có thể chỉnh sửa khi bạn tạo chúng trong nguồn dữ liệu/đại biểu của mình. –

+0

Tôi có cùng một câu hỏi. Nếu bạn có thể cung cấp thêm chi tiết trong một câu trả lời chính thức, điều đó thật tuyệt vời. – Brett

Trả lời

6

Trong bảngXem: viewForTableColumn phương thức ủy nhiệm Tôi phải đặt cụ thể từng ô để có thể chỉnh sửa.

Dường như nó hoạt động không có vấn đề sau một vài tuần sử dụng, nhưng tôi vẫn nghĩ rằng phải có một phương pháp ít tốn kém hơn bằng cách nào đó.

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { 


    NSTableCellView *cellView; 
    if([tableColumn.identifier isEqualToString:@"word"]) 
    { 
     wordCellView = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self]; 
     cellView = wordCellView; 
     [cellView.textField setEditable:YES]; // Make Cell Editable! 
    } 
} 
+0

Đặt nó có thể chỉnh sửa là chìa khóa cho tôi! Cảm ơn! – Brett

+2

Bạn cần phải trả về 'cellView' ở cuối bên phải? – Arc676

+0

Ý tưởng tuyệt vời, nhưng trên thực tế nó không cần thiết; xem http://stackoverflow.com/a/28282459/341994. – matt

7

Bạn có thể làm điều này trong Interface Builder bằng cách chọn Text Field thoại di động, sau đó sử dụng các thuộc tính Inspector, di chuyển xuống trình đơn thả xuống tựa đề "Hành vi" và chọn "Editable".

Điều này một mình sẽ cho phép bạn có thể nhấp đúp vào các ô riêng lẻ và để chúng trở thành TextField có thể chỉnh sửa.

Để thực hiện các chỉnh sửa bạn thực hiện có hiệu lực, bạn cũng sẽ phải thực hiện các phương pháp sau đây từ Nghị định thư NSTableViewDelegate: - (void) tableView: setObjectValue: forTableColumn: row:

[Xem của Apple Documents cho chức năng này] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Protocols/NSTableDataSource_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/NSTableViewDataSource/tableView:objectValueForTableColumn:row :)

Như thường lệ, phương pháp này sẽ phải được thực hiện trong đối tượng mà bạn đã đặt làm đại biểu cho đối tượng NSTableView.

[Xem của Apple Documents trên các đại biểu trong trường hợp bạn muốn một bài đánh giá của họ] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html#//apple_ref/doc/uid/TP40002974-CH7-SW18)

+0

Tôi tin rằng mặc dù các liên kết mà bạn cung cấp có thể phù hợp với câu trả lời của bạn, nhưng bây giờ tài liệu của Apple nói rằng kỹ thuật mà bạn chỉ định trong câu trả lời chỉ dành cho chế độ xem bảng dựa trên ô. Bây giờ, Apple khuyến cáo rằng chúng tôi sử dụng chế độ xem bảng dựa trên chế độ xem và thay vì sử dụng phương thức ủy nhiệm, - (void) tableView: setObjectValue: forTableColumn: row: để đặt giá trị mà chúng tôi sử dụng mục tiêu/hành động. Ai đó có thể cho tôi biết làm thế nào để cho phép người dùng chỉnh sửa các giá trị của một tableView và lấy lại các giá trị đó vào mô hình của tôi, bằng cách sử dụng target/action? – Kaydell

Các vấn đề liên quan