2012-10-11 23 views
6

Tôi có một NSTableView loại nội dung View Based với hai cột.Làm thế nào để lấy các phần tử bên trong một hàng đã chọn trong một NSTableView?

Đối tượng của tôi được cấu trúc như sau:

Table View 
    Table Column 
     Table Cell View 
      Text Field 
    Table Column 
     Table Cell View 
      Popup Button 

Đối với một hàng đã chọn, tôi muốn để có được một yếu tố bên trong hàng đã chọn cho một cột cụ thể. Cụ thể, tôi muốn lấy số Text Field trong cột đầu tiên cho hàng đã chọn.

Tôi có một ổ cắm để xem bảng và tôi có chỉ số của các hàng đã chọn cho đến nay, nhưng đó là về nó:

- (void)getSelectedTextField 
{ 
    NSInteger selected = [tableView selectedRow]; 
} 

Bất kỳ ý tưởng về làm thế nào tôi có thể đi về việc giải quyết vấn đề này?

Chỉnh sửa: Đây là điều tôi đang cố gắng làm:

+1

Bạn cần truy cập các yếu tố để làm gì? Nếu bạn chỉ cần lấy dữ liệu bạn nên lưu trữ nó trong một NSTableViewDataSource và sau đó cung cấp nguồn dữ liệu đó cho NSTableView. –

+0

@NathanVillaescusa: Nó là để sửa đổi một trong các điều khiển. Cụ thể, tôi muốn thay đổi trường văn bản ở trạng thái chỉnh sửa và tập trung vào trường đó để người dùng có thể bắt đầu chỉnh sửa giá trị trường văn bản ngay sau khi được chọn. –

Trả lời

18

tôi dường như để giải quyết vấn đề của riêng mình:

- (void)getSelectedTextField 
{ 
    NSInteger selected = [tableView selectedRow]; 

    // Get row at specified index 
    NSTableCellView *selectedRow = [tableView viewAtColumn:0 row:selected makeIfNecessary:YES]; 

    // Get row's text field 
    NSTextField *selectedRowTextField = [selectedRow textField]; 

    // Focus on text field to make it auto-editable 
    [[self window] makeFirstResponder:selectedRowTextField]; 

    // Set the keyboard carat to the beginning of the text field 
    [[selectedRowTextField currentEditor] setSelectedRange:NSMakeRange(0, 0)]; 
} 
+1

Thưa bạn, xin vui lòng giúp tôi để có được một mục được chọn của một combobox, mà tôi thêm vào một trong các cột insted của textfield. Bất kỳ trợ giúp nào tuyệt vời – Abin

0

Nếu trường văn bản là subview duy nhất của tế bào xem bảng của bạn, bạn có thể nhận được một tham chiếu đến nó với đoạn mã sau, và chọn văn bản của nó, vì vậy nó đã sẵn sàng để chỉnh sửa:

-(void)tableViewSelectionDidChange:(NSNotification *)notification { 
    NSInteger row = [notification.object selectedRow]; 
    NSTextField *tf = [[[notification.object viewAtColumn:0 row:row makeIfNecessary:NO]subviews] lastObject]; 
    [tf selectText:tf.stringValue]; 
} 
3

Sử dụng có thể lấy tất cả phần tử của ô xem bảng bằng cách xem tiểu sử của nó. Đề xuất tiểu sử hiển thị danh sách nhật ký hiển thị trước khi sử dụng nó

NSInteger index = [self.tableViewFiles selectedRow]; 

// Get row at specified index of column 0 (We just have 1 column) 
NSTableCellView *cellView = [self.tableViewFiles viewAtColumn:0 row:index makeIfNecessary:YES]; 

// Get row's checkBox (at index 0, textFields is 1,2) 
NSButton *checkBox = [[cellView subviews] objectAtIndex:0]; 
Các vấn đề liên quan