2012-01-07 5 views
0

J'essaie de créer un écran dans mon application MonoTouch C# qui permet aux utilisateurs de rechercher des restaurants. L'utilisateur peut rechercher des restaurants à proximité, n'importe où, ou récemment visités. Ces trois options sont présentées comme un contrôle segmenté. Lorsqu'un utilisateur clique sur un élément du contrôle segmenté, je bascule les vues visibles. En d'autres termes, chaque option représente sa propre vue.MonoTouch Utilisation des vues et des contrôleurs

Je souhaite que chaque vue possède son propre contrôleur de vue de table de sorte que lorsqu'un utilisateur clique sur un restaurant, plus de détails sont donnés à l'utilisateur. De ce que je peux dire, je dois mettre en œuvre l'approche montrée ici: http://www.alexyork.net/blog/post/UINavigationController-with-MonoTouch-Building-a-simple-RSS-reader-Part-1.aspx

Mon problème est, je n'arrive pas à trouver un moyen d'ajouter un contrôleur à une vue. Dans mon scénario, je crois que j'ai besoin d'ajouter un UITableViewController à chaque UIView (un pour chaque élément de contrôle segmenté). Est-ce possible? Si c'est le cas, comment? Si ce n'est pas possible, comment dois-je faire pour atteindre mon objectif? Cela semble assez simple, mais j'ai l'impression d'être loin et de mal comprendre quelque chose. Voici la méthode que j'appelle lorsque l'événement ViewDidLoad est atteint:

private void LoadViews() 
{ 
    int subViewHeight = 320; 

    #region Nearby View 

    RectangleF nearbyRectangle = new RectangleF(0, 0, UIScreen.MainScreen.Bounds.Width, subViewHeight); 
    this.nearbyView = new UIView(nearbyRectangle); 
    this.nearbyView.BackgroundColor = UIColor.Blue; 

    this.nearbyTableViewController = new NearbyTableViewController(IntPtr.Zero); 
    this.NavigationController.PushViewController(nearbyTableViewController, false); 
    this.View.Add(nearbyView); 

    #endregion Nearby View 

    #region Elsewhere View 

    RectangleF elsewhereRectangle = new RectangleF(0, 0, UIScreen.MainScreen.Bounds.Width, subViewHeight); 
    this.elsewhereView = new UIView(elsewhereRectangle); 
    this.elsewhereView.Hidden = true; 
    this.elsewhereView.BackgroundColor = UIColor.Green; 

    // Add the search text field 
    UITextField searchElsewhereTextField = new UITextField(); 
    searchElsewhereTextField.BorderStyle = UITextBorderStyle.RoundedRect; 
    searchElsewhereTextField.Frame = new RectangleF(20, 13, 200, 31); 
    searchElsewhereTextField.Placeholder = "query"; 
    this.elsewhereView.AddSubview(searchElsewhereTextField); 

    // Add the search button 
    UIButton searchButton = UIButton.FromType(UIButtonType.RoundedRect); 
    searchButton.Frame = new RectangleF((UIScreen.MainScreen.Bounds.Width - 90), 13, 70, 31); 
    searchButton.SetTitle("Search", UIControlState.Normal); 
    this.elsewhereView.AddSubview(searchButton); 

    // Add the results table 
    this.elsewhereTableView = new UITableView(new RectangleF(0, 52, 
UIScreen.MainScreen.Bounds.Width, subViewHeight-70), UITableViewStyle.Plain); 
    this.elsewhereTableView.Source = new NearbyListDataSource(this);   
    this.elsewhereView.AddSubview(elsewhereTableView); 

    this.View.Add(elsewhereView); 

    #endregion Elsewhere View 

    #region Recent View 

    RectangleF recentRectangle = new RectangleF(0, 0, UIScreen.MainScreen.Bounds.Width, subViewHeight); 
    this.recentView = new UIView(recentRectangle); 
    this.recentView.Hidden = true; 

    this.recentTableView = new UITableView(new RectangleF(0, 0, UIScreen.MainScreen.Bounds.Width, subViewHeight), UITableViewStyle.Plain); 
    this.recentTableView.Source = new NearbyListDataSource(this);   
    this.recentView.AddSubview(recentTableView); 

    this.View.Add(recentView); 

    #endregion Recent View 
} 

Nous vous remercions de votre aide!

Répondre

1

Habituellement, si vous voulez faire la transition entre les UIViewControllers, vous utiliserez UINavigationController et les "poussez" sur l'écran. Dans ce cas, vous voulez un UISegmentedControl dans UINavigationBar de UINavigationController.

this.PushViewController(myRecentRestaurantsViewController, true); 

Lorsque l'élément associé est cliqué dans le contrôle segmentée, vous appelez la méthode ci-dessus pour pousser le contrôleur approprié en vue.

Fondamentalement UIViewControllers sont des "conteneurs" pour les vues. Si jamais vous voulez ajouter un point de vue d'ViewController à la vue d'une autre ViewController s'il vous plaît regarder mon blog sur les conteneurs personnalisés:

http://blog.devnos.com/wont-somebody-please-think-of-the-children

+0

Bonjour, Je viens d'ajouter mon code à la question. Merci pour votre réponse. J'ai toujours des problèmes. Pourriez-vous envisager de revoir mon code et de me dire ce que je fais de mal? Je suis complètement frustré par cela. Je vous remercie! –

+0

Dans les cas plus complexes où vous ne pouvez pas réduire le comportement souhaité à quelques lignes de code, veuillez créer un petit exemple d'application autonome pour révision. – Anuj

Questions connexes