2010-03-12 9 views
5

próbuję dodać tableview do widoku w kodzie zamiast korzystania z interfejsu Builder i niestety to powoduje pewne problemy = (Jak dodać przewijalną NSTableView programowo

Oto przykład, jak to robię . teraz

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

resultsScrollView.documentView = tableView; 

[someView addSubview: scrollView]; 

Więc w zasadzie jestem po prostu umieszczając tableView wewnątrz Scrollview (bo to właśnie IB robi), a następnie dodając drugi jako podrzędny w someView rezultatem jest to, że pojawi się tableView. - ale brak danych jest pokazywany w tableView. Debugowanie pokazuje, że dataSource jest pytane o liczbę wierszy w tableView, ale metoda:

tableView:objectValueForTableColumn:row: 

nigdy nie jest wywoływana. Podejrzewam, że jest tak z powodu mojego sposobu tworzenia tableView.

Próbowałem google, ale bez powodzenia i "Przewodnik po programach do programowania widoków tabel" na macdevcenter też nie był przydatny. czego mi brakuje?

góry dzięki ...

+0

Dlaczego masz tableView, a następnie resultsTableView? – pheelicks

+0

głupi błąd wklejania kopii ... zmienił się teraz –

Odpowiedz

7

Powoduje to, że pojawia się tableView - ale dane nie są wyświetlane w tableView. Debugowanie pokazuje, że źródłem danych jest proszony o ile wierszy są w Tableview ale metoda:

tableView:objectValueForTableColumn:row: 

nigdy nie jest wywoływana.

Nie prosi o wartości obiektów dla kolumn, ponieważ nie ma kolumn. Utwórz instancje NSTableColumn i add them to the table view.

+0

dziękuję bardzo ... głupie głupie głupie =) –

0

Nie wydaje (z próbki), że jesteś wprowadzenie tableview wewnątrz Scrollview. Czy jest dodawana jako wyekspozycja gdzieś nas nie pokazuje?

Czy na pewno potrzebujesz osobnego przewijania? Czy nie ma już możliwości przewijania widoku tableView?

+1

Chodzi o to, że jeśli nie zrobię osobnego ScrollView, TableView w ogóle się nie pojawia. I jestem całkiem pewny, że scrollView musi być dodany osobno .. Podobnie jak z widokami tekstowymi .. Ale oczywiście mogę się mylić =/ Czytałem gdzieś, że ustawienie documentView jest wszystkim czego potrzebujesz z scrollViews .. I TableView jest pokazywany wewnątrz scrollView .. Ale żadne dane nie są prezentowane w środku tego, że nie jest powołany fakt, że numberOfRows jest wywoływany .. –

+2

David Gelhar: Nie, NSTableView nie implementuje przewijania. Brak NSView, z wyjątkiem NSScrollView - właśnie do tego służy NSScrollView. –

16

stworzyłem projekt domyślny próbki, a następnie zrobił, co następuje:

 
- (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; 
} 

można pobrać aplikację przykładową TableViewInCode

(Oh, do składni dot objective-c, po prostu powiedz nie.: -)

+0

Naprawdę podoba mi się składnia kropki =) I dziękuję za kod –

Powiązane problemy