2009-07-24 4 views
2

Ich versuche, eine Ansicht programmgesteuert zu erstellen. Das Ergebnis, das ich haben möchte, ist eine Scroll-Ansicht mit einer Tabellenansicht. Und unter dieser Tabelle einige KnöpfeHinzufügen von Schaltflächen unter einer Tabellenansicht

Ich weiß nicht genau hinzufügen Ansicht ich will, wie zu tun, dass ich dies versucht, aber es funktioniert nicht:

- (void)loadView { 
    [super loadView]; 

    tableView = [[UITableView alloc] initWithFrame:[[self view] bounds] style:UITableViewStyleGrouped]; 
    [tableView setDelegate:self]; 
    [tableView setDataSource:self]; 

    scrollView = [[UIScrollView alloc] initWithFrame:[[self view] bounds]]; 
    //[scrollView setBackgroundColor:[UIColor blackColor]]; 
    [scrollView setBouncesZoom:YES]; 

    deconnectButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
    [deconnectButton setTitle:@"Deconect" forState:UIControlStateNormal]; 
    [deconnectButton setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; 

    //[deconnectButton addTarget:self action:action forControlEvents:UIControlEventTouchUpInside]; 
    deconnectButton.frame = tableView.frame; 
    NSLog(@"Tableview frame : %@", NSStringFromCGRect(tableView.frame)); 

    [scrollView addSubview:deconnectButton]; 

    [scrollView addSubview:tableView]; 


    [[self view] addSubview:scrollView]; 


} 

Was bin ich fehlt oder falsch?

Antwort

16

Eigentlich habe ich die Lösung gefunden. Die Tabellenansicht hat eine Eigenschaft namens tableFooterView. Alles, was Sie tun müssen, ist:

-Create ein UIView -Add eine Taste zu dieser Ansicht -Finaly es

Hier auf dem tableFooterView gesetzt ist der Code:

tableView = [[UITableView alloc] initWithFrame:[[self view] bounds] style:UITableViewStyleGrouped]; 
[tableView setDelegate:self]; 
[tableView setDataSource:self]; 

// create a UIButton (Deconnect button) 
UIButton *btnDeco = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
btnDeco.frame = CGRectMake(0, 0, 280, 40); 
[btnDeco setTitle:@"Déconnecter" forState:UIControlStateNormal]; 
btnDeco.backgroundColor = [UIColor clearColor]; 
[btnDeco setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; 
[btnDeco addTarget:self action:@selector(deconnect:) forControlEvents:UIControlEventTouchUpInside]; 

// create a UIButton (Change pseudo button) 
UIButton *btnChange = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
btnChange.frame = CGRectMake(0, 50, 280, 40); 
[btnChange setTitle:@"Changer Pseudo" forState:UIControlStateNormal]; 
btnChange.backgroundColor = [UIColor clearColor]; 
[btnChange setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; 
[btnChange addTarget:self action:@selector(changePseudo:) forControlEvents:UIControlEventTouchUpInside]; 


//create a footer view on the bottom of the tabeview 
UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(20, 0, 280, 100)]; 
[footerView addSubview:btnDeco]; 
[footerView addSubview:btnChange]; 

tableView.tableFooterView = footerView; 
[footerView release]; 

[[self view] addSubview:tableView]; 
2

Eine Sache zu beachten ist, dass UITableView eine Unterklasse von UIScrollView ist, so dass Sie wahrscheinlich die Größe der UITableView anders verwalten müssen, als wenn Sie es nur das Scrollen lassen würde.

Ihr Code scheint die TableView und den DeconnectButton auf die gleiche Größe einzustellen, und diese Größe entspricht der Größe der scrollView-Superansicht. Ich würde erwarten, dass dies Auswirkungen auf das TableView hat, das den Button verdeckt.

Basierend auf dem, was Sie beschreiben, klingt es wie Sie sollten berechnen, was die Größe der Tabelle auf seinen Inhalt basieren muss und dann seinen Rahmen entsprechend einstellen. Stellen Sie dann den Rahmen der Schaltfläche so ein, dass er darunter liegt. Außerdem müssen Sie die Größe der scrollView mit ihrer contentSize-Eigenschaft festlegen. Das Problem in diesem Szenario besteht darin, dass Sie die Größe von scrollView und die Position der Schaltfläche immer synchron mit der Größe von tableView beibehalten müssen.

Sie könnten untersuchen, die letzte Zeile in der Tabelle die Schaltfläche und die äußere Bildlaufansicht beseitigen. Am Ende kann das zu weniger Code führen.

1

Wenn Sie Wenn Sie die UITableView in einem UINavigationController haben, können Sie unten auf Ihrer UITableViewController/UIViewController Symbolleistenelemente festlegen.

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:nil action:nil]; 
self.toolbarItems = @[barButton]; 

Bitte beachten Sie die Toolbar als auch wie diese zeigen:

self.navigationController.toolbarHidden = NO; 

//or animated 
[self.navigationController setToolbarHidden:NO animated:YES]; 

Das ist wahrscheinlich sauberer als einen Blick unter den Tisch Hacking.