2010-02-28 4 views
0

Je le tableviewdelegate suivant:problème avec UITableViewDelegate

private class TableViewDelegate : UITableViewDelegate 
    { 
     private DaysViewController _dvc; 
     private List<DateTime> ConferenceDates; 
     public TableViewDelegate (DaysViewController controller, List<DateTime> dates) 
     { 
      _dvc = controller; 
      ConferenceDates = dates; 
     } 



     /// <summary> 
     /// If there are subsections in the hierarchy, navigate to those 
     /// ASSUMES there are _never_ Categories hanging off the root in the hierarchy 
     /// </summary> 
     public override void RowSelected (UITableView tableView, NSIndexPath indexPath) 
     { 
      string date = ConferenceDates[indexPath.Row].ToShortDateString(); 
      Console.WriteLine ("DaysViewController:TableViewDelegate.RowSelected: Label=" + date); 

          /*SessionsViewController sessionsView = new SessionsViewController(date); 
      sessionsView.Title = date; 
      _dvc.NavigationController.PushViewController(sessionsView,true);*/ 



      EventsViewController eventsView = new EventsViewController (date); 

      eventsView.Title = date; 
      try { 

       _dvc.NavigationController.PushViewController 
       (eventsView, true); 

      } catch (Exception ex) { 
       Log.Error(ex); 
      } 
     } 
    } 

qui est ajouté comme ceci:

tableView = new UITableView { 
      Delegate = new TableViewDelegate (this, ConferenceDates), 
      DataSource = new TableViewDataSource (this, ConferenceDates), 
      AutoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth, 
      BackgroundColor = UIColor.Clear, 
      TableHeaderView = navBar, 
      Frame = new RectangleF (0, 0, this.View.Frame.Width, this.View.Frame.Height) 
     }; 

Tout fonctionne bien pour la UITableView - les données à être chargée, etc, mais chaque fois que je clique sur une cellule pour charger les données enfant - _dvc.NavigationController est null

Est-ce que quelqu'un sait où cela est réglé? ou peut-être, si elle est définie par le cadre - comment cela pourrait être annulé?

Bravo - laissez-moi savoir si je dois poster plus de code.

w: //

Répondre

2

Si vous souhaitez utiliser un contrôleur de navigation sur une vue, vous pouvez le faire en créant une instance d'un UINavigationController et ajouter votre vue à ce contrôleur. Ensuite, votre vue devient une sous-vue de UINavigationController et le NavigationController de votre vue devrait maintenant être accessible depuis votre TableViewDelegate. Présentez le contrôleur de navigation que vous voulez. Dans l'exemple ci-dessous, en tant que contrôleur de vue modale.

tableView = new UITableView { 
      Delegate = new TableViewDelegate (this, ConferenceDates), 
      DataSource = new TableViewDataSource (this, ConferenceDates), 
      AutoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth, 
      BackgroundColor = UIColor.Clear, 
      TableHeaderView = navBar, 
      Frame = new RectangleF (0, 0, this.View.Frame.Width, this.View.Frame.Height) 
     }; 

UINavigationController navController = new UINavigationController(tableView); 
navController.ModalTransitionStyle = UIModalTransitionStyle.FlipHorizontal; 

this.PresentModalViewController(navController, true); 
1

chose étrange est - si je le fais dans le constructeur:

public DVCTableViewDelegate (DaysViewController controller, List<DateTime> dates) 
{ 
    this._dvc = controller; 
    this.ConferenceDates = dates; 
    this.navController = controller.NavigationController; 
} 

NavController est un UINavigationController mais dvc.NavigationController est nulle dans la ligne méthode sélectionnée!

étrangeté.