2010-10-14 8 views
3

classe FahrzeugMonoTouch Dialog ne peut pas sortir de iList parce BackButton est manquant,

{ 
     [Entry ("Typ")] 
     public string typ; 
     [Entry ("Name")] 
     public string name; 
     [RadioSelection("ListOfString")] 
     public int selected=0; 
     public IList<string> ListOfString; 


    } 
    public override void ViewWillAppear (bool animated) 
    { 
     base.ViewWillAppear (animated); 
     Fahrzeug x = new Fahrzeug(); 
     x.typ="Neuwagen"; 
     x.name="BMW X3"; 
     x.ListOfString=new List<string>(); 
     x.ListOfString.Add("asdf"); 
     x.ListOfString.Add("bsdf"); 
    var bc= new BindingContext(null,x,"asdf"); 
     var dv = new MonoTouch.Dialog.DialogViewController(bc.Root,true); 
     dv.WantsFullScreenLayout=false; 
     dv.View.BackgroundColor=UIColor.DarkGray; 


    this.startview.AddSubview(dv.View); 

Bonjour, je ai le code ci-dessus. startview n'est pas en plein écran, il ya une barre de navigation ci-dessus, la normale dv est également au-delà de la barre de navigation, mais quand je clique sur l'ILIST pour changer la valeur, l'ILIST est en plein écran, donc je ne peux pas revenir, ... est aussi, que le réel est un UIView, je veux cela dans un uiview, .. et je veux utiliser la réflexion, car alors je peux directement sérialiser les données des idées?

Répondre

3

Le bouton Précédent provient d'un UINavigationController. Vous devez créer un UINavigationController pour contenir votre DialogViewController, ou vous devez personnaliser manuellement votre DialogViewController.

Dans le premier cas, vous pouvez utiliser:

var ui = new UINavigationController (dv); 

« ui » contient alors votre contrôleur de vue réelle, ajouter à votre fenêtre de niveau supérieur, ou si vous disposez déjà d'un contrôleur de vue (par exemple , de certains rappel dans votre contrôleur existant):

PresentModalViewController (ui, shouldAnimate); 

vous pouvez personnaliser votre DialogViewController à la main, vous pouvez voir comment je le fais dans TweetStation sur TweetStation/UI/Timeline.cs et ajoutez les boutons que vous avoir besoin.

+0

J'ai le même problème, j'ai un 'DialogViewController' imbriqué dans un' UINavigationController' qui est à son tour hébergé dans un 'UIPopoverController'. Lorsque je crée une racine imbriquée dans la racine de mon 'DialogViewController' je ne reçois pas le bouton de retour? J'ai essayé de régler l'option «pousser» comme @Darkwood suggéré ci-dessous en vain. En outre, le contrôleur de l'élément racine imbriqué est un 'UITableViewController' pas sûr si cela aurait un effet. – James

+1

En fait, c'est bon je l'ai compris. Mon titre sur le 'DialogViewController' était effacé! – James

9

J'ai eu le même problème, le bouton de retour n'a pas montré. Après avoir regardé le DialogViewController.cs, j'ai vu que le constructeur pouvait prendre un second argument "pushing". Si vous le définissez sur true, le bouton Précédent est défini sur visible.

1

J'ai rencontré le même problème et la résonance était que le "Titre" était manquant, donc le contrôleur de navigation sans un titre ne montre pas de bouton "retour".

La solution était facile, quand je généré les racines-éléments i oublièrent un titre pour la première racine comme ceci:

var root = new RootElement("Settings"){ // <-- IMPORTANT! A title must be set here(!) 
     new Section("Current server"){ 
      new RootElement("Server", new RadioGroup (0)){ 
       //... 
      } 
     }, 

Mon Constructor du DialogViewController hérité par exemple:

public partial class SettingsViewController : DialogViewController 
{ 
    public SettingsViewController() : 
     base (UITableViewStyle.Grouped, null, true) 
    { 
     Root = GetRoot(); 
    } 

Cela fonctionne comme un charme ;-)

BTW: dans viewwillappear j'ajoute un bouton et recharge des données:

public override void ViewWillAppear (bool animated) 
{ 
     NavigationItem.SetRightBarButtonItem(
      new UIBarButtonItem("Add Server", UIBarButtonItemStyle.Plain, (sender,args) => { 
      // button was clicked 

      NavigationController.PushViewController(new AddServerDialogViewController(), true); 

     }), true); 

     //TableView.SetEditing(true, true); 

     ReloadData(); 

     base.ViewWillAppear(true); 
}