2014-07-01 18 views
6

Utilizzando Xamarin Forms, come può essere modificata la vista di selezione predefinita per mostrare in un PopoverController? Il seguente codice mostra "I popover non possono essere presentati da una vista che non ha una finestra". su iOS.XMarin Forms Picker - Custom UIPickerView

public class BindablePickerRenderer : PickerRenderer { 
     private UIPickerView picker; 

     protected override void OnElementChanged(ElementChangedEventArgs<Picker> e) { 
      base.OnElementChanged(e); 

      this.picker = new UIPickerView() { 
       Source = (UIPickerViewModel) new PickerSource(e.NewElement) 
      }; 

      var popoverContent = new UIViewController(); 
      popoverContent.View = picker; 


      var popoverController = new UIPopoverController(popoverContent); 
      popoverController.PopoverContentSize = new SizeF(320, 180); 
      popoverController.PresentFromRect(picker.Frame, this.Control.InputView, UIPopoverArrowDirection.Up, true); 
     } 
} 

risposta

1

È this.Control.InputView la vista da cui si sta presentando il popOverController? In tal caso, sembra che al momento dell'esecuzione di OnElementChanged(), il tuo this.Control.InputView non sia membro della gerarchia delle finestre, per qualsiasi motivo.

Si consiglia di inserire invece l'azione di presentazione di popOver in una sostituzione MovedToWindow() o ViewDidAppear(). Non so che tipo sia il tuo this.Control.InputView, ma dovrai sovrascrivere uno di quei metodi in quel tipo.