2009-03-17 7 views
1

Je souhaite pouvoir basculer entre un UITableView et un UIView standard dans une vue parente. Fondamentalement, j'ai un UITableView qui montre sur le chargement affichant un journal d'informations. Je veux avoir un contrôle de segment dans l'en-tête de la fenêtre qui, lorsque l'utilisateur tape, passe à une vue graphique qui est un UIView standard.UINavigationController avec UITableView et UIView

Le UIViewController en question doit pouvoir être poussé à partir d'une pile RootViewController.

J'ai essayé un certain nombre de choses, mais je n'arrive pas à faire marcher ça. Est-ce que quelqu'un a des exemples de code ou des suggestions sur la façon dont cela pourrait être fait?

+0

J'ai trouvé une réponse. Je posterai ci-dessous – JamesSugrue

Répondre

0

Il est en réalité pas aussi difficile qu'il semblait d'abord. Fondamentalement, si vous avez un ParentViewController avec une vue vide et un NavController en haut. Placez le contrôle de segment dans la vue centrale du NavController.

Ensuite, il vous suffit de basculer simplement ViewController vues lorsque le contrôle de segment change. La seule chose que vous avez à faire est de garder un pointeur sur la vue actuelle et de la supprimer avant d'ajouter la nouvelle vue au parentVC. Code ci-dessous:

- (void)showView 
{ 
    if (_currentView != nil) 
     [_currentView removeFromSuperview]; 

    if (segmentControl.selectedSegmentIndex == 0) 
    { 
     if (_graph == nil) 
      _graph = [[DrawGraphViewController alloc] initWithNibName:@"DrawGraphViewController" bundle:[NSBundle mainBundle]]; 

     self.navigationItem.rightBarButtonItem = nil; 
     _currentView = _graph.view; 

     [contentView addSubview:_graph.view]; 
     [_graph reloadGraph]; 
    } 
    else if (segmentControl.selectedSegmentIndex == 1) 
    { 
     if (_log == nil) 
      _log = [[LogTableViewController alloc] initWithNibName:@"LogTableView" bundle:[NSBundle mainBundle]]; 

     self.navigationItem.rightBarButtonItem = self.editButtonItem; 
     _currentView = _log.view; 
     [contentView addSubview:_log.view]; 
     [_log loadData]; 
    } 
    else { 
     if (_export == nil) 
      _export = [[ExportViewController alloc] initWithNibName:@"ExportView" bundle:[NSBundle mainBundle]]; 

     _currentView = _export.view; 
     [contentView addSubview:_export.view]; 
    } 
} 
0

Il semble que vous devriez avoir une vue parent qui contient le contrôle de segment et de l'espace pour une vue enfant. Lorsque l'utilisateur sélectionne un segment, vous ajoutez la vue pertinente (table ou graphique) en tant qu'enfant de la vue et définissez son rectangle pour qu'il occupe la zone enfant.

----------- 
| Segment | 
----------- 
|   | 
|   | 
| Child | 
|   | 
----------- 
0

Vous n'avez pas du tout à modifier UIViewController pour l'afficher dans un contrôleur de navigation. Votre contrôleur segmenté doit appeler une méthode qui exécute le code suivant:

UIViewController *myViewController = [[UIViewController alloc] init]; 
[self.navigationController pushViewController:myViewController animated:YES]; 
[myViewController release]; 

Je n'ai pas un lien vers un exemple, mais je ne peux répondre à d'autres questions si nécessaire.

-Drew

Questions connexes