2010-03-12 37 views
5

Tôi đang cố gắng để thêm một tableview đến một cái nhìn trong mã thay vì sử dụng giao diện Builder và tiếc là nó gây ra một số vấn đề = (Làm thế nào để thêm một NSTableView cuộn lập trình

Dưới đây là một ví dụ về cách tôi đang làm nó . Bây giờ

NSScrollView *scrollView = [[NSScrollView alloc] initWithFrame:someRect]; 
NSTableView *tableView = [[NSTableView alloc] initWithFrame: scrollView.bounds]; 
resultsTableView.dataSource = self; 

resultsScrollView.documentView = tableView; 

[someView addSubview: scrollView]; 

vì vậy, về cơ bản tôi chỉ đặt tableView bên trong scrollview (vì đó là những gì IB đang làm) và sau đó thêm sau này như là một subview của someView kết quả là một tableView xuất hiện -. nhưng Gỡ lỗi cho thấy rằng dataSource đang được hỏi về số lượng hàng trong tableView nhưng phương thức:

tableView:objectValueForTableColumn:row: 

không bao giờ được gọi. Tôi nghi ngờ rằng điều này là do cách tạo bảngView của tôi.

Tôi đã thử google nhưng không có may mắn và "Giới thiệu về Hướng dẫn lập trình xem bảng" trên macdevcenter cũng không hữu ích. Tôi đang thiếu gì?

Cảm ơn trước ...

+0

Tại sao bạn có tableView và sau đó resultsTableView? – pheelicks

+0

sai lầm sao chép dán ngu ngốc ... thay đổi ngay bây giờ –

Trả lời

7

Kết quả là một tableView xuất hiện - nhưng không có dữ liệu nào được hiển thị trong bảngView. Gỡ lỗi cho thấy rằng dataSource đang được hỏi về số lượng hàng trong tableView nhưng phương thức:

tableView:objectValueForTableColumn:row: 

không bao giờ được gọi.

Nó không yêu cầu bạn cho các giá trị đối tượng cho bất kỳ cột nào vì nó không có bất kỳ cột nào. Tạo một số trường hợp NSTableColumnadd them to the table view.

+0

cảm ơn bạn rất nhiều ... ngu ngốc ngu ngốc ngu ngốc =) –

0

Nó không xuất hiện (từ mẫu của bạn) mà bạn đang đặt tableView bên trong scrollView. Có phải nó đang được thêm vào dưới dạng một chế độ xem phụ ở một nơi nào đó mà bạn không hiển thị cho chúng tôi không?

Ngoài ra, bạn có chắc là bạn cần có một chế độ xem cuộn riêng? Không tableView thực hiện cuộn chưa?

+1

Vấn đề là, nếu tôi không thực hiện một ScrollView riêng biệt, TableView sẽ không xuất hiện chút nào. Và tôi khá chắc chắn rằng scrollView cần phải được thêm một cách riêng biệt .. Cũng giống như với textViews .. Nhưng ofcourse tôi có thể sai =/ Tôi đã đọc một nơi nào đó mà thiết lập documentView là tất cả những gì bạn cần với scrollViews .. Và các TableView đang được hiển thị bên trong scrollView .. Nhưng không có dữ liệu được trình bày bên trong của nó despited thực tế là numberOfRows đang được gọi là .. –

+2

David Gelhar: Không, NSTableView không thực hiện di chuyển. Không có NSView nào, ngoại trừ NSScrollView — đó là những gì NSScrollView cho. –

16

tôi tạo ra các dự án mẫu mặc định và sau đó đã làm như sau:

 
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    NSRect   scrollFrame = NSMakeRect(10, 10, 300, 300); 
    NSScrollView* scrollView = [[[NSScrollView alloc] initWithFrame:scrollFrame] autorelease]; 

    [scrollView setBorderType:NSBezelBorder]; 
    [scrollView setHasVerticalScroller:YES]; 
    [scrollView setHasHorizontalScroller:YES]; 
    [scrollView setAutohidesScrollers:NO]; 

    NSRect   clipViewBounds = [[scrollView contentView] bounds]; 
    NSTableView* tableView  = [[[NSTableView alloc] initWithFrame:clipViewBounds] autorelease]; 

    NSTableColumn* firstColumn  = [[[NSTableColumn alloc] initWithIdentifier:@"firstColumn"] autorelease]; 
    [[firstColumn headerCell] setStringValue:@"First Column"]; 
    [tableView addTableColumn:firstColumn]; 

    NSTableColumn* secondColumn  = [[[NSTableColumn alloc] initWithIdentifier:@"secondColumn"] autorelease]; 
    [[secondColumn headerCell] setStringValue:@"Second Column"]; 
    [tableView addTableColumn:secondColumn]; 

    [tableView setDataSource:self]; 
    [scrollView setDocumentView:tableView]; 

    [[[self window] contentView] addSubview:scrollView]; 

} 



- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView 
{ 
    return 100; 
} 


- (id) tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex 
{ 
    NSString* cellValue = [NSString stringWithFormat:@"%@ %ld", [aTableColumn identifier], (long)rowIndex]; 

    return cellValue; 
} 

Bạn có thể lấy các ứng dụng mẫu TableViewInCode

(Oh, để mục tiêu-c dot cú pháp, chỉ cần nói không.: -)

+0

Tôi thực sự thích cú pháp chấm =) Và cảm ơn bạn đã mã số –

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