Xamarin Picker Просмотр неверного выбора iOS 12 - PullRequest
0 голосов
/ 04 декабря 2018

Ниже приведен пример кода, уже переданного в документы Xamarin.

 <Picker>
  <Picker.ItemsSource>
    <x:Array Type="{x:Type x:String}">
      <x:String>Baboon</x:String>
      <x:String>Capuchin Monkey</x:String>
      <x:String>Blue Monkey</x:String>
      <x:String>Squirrel Monkey</x:String>
      <x:String>Golden Lion Tamarin</x:String>
      <x:String>Howler Monkey</x:String>
      <x:String>Japanese Macaque</x:String>
    </x:Array>
  </Picker.ItemsSource>
</Picker>

При запуске этого кода в симуляторе iOS 12 он работает, но когда вы нажимаете кнопку «Готово», выбранный элемент изменяется и назначается 4-муэлемент в списке из выбранного элемента.

Например, если вы выберете Бабуина из списка выше и нажмете кнопку «Готово», выбранный элемент изменится на Тамарин Золотого Льва.

Я не уверенесли проблема связана только с iOS 12 или нет.Я загружаю симуляторы предыдущей версии, чтобы увидеть.

Я загрузил видеозапись симулятора здесь , может кто-нибудь подсказать, если это проблема, связанная с ОС, или что-то еще?

Спасибо,

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Решение, как упомянуто здесь (Очистка содержимого симулятора) сработало.

Проблема была с симулятором XCode, не уверен, что вызвало эту проблему.

0 голосов
/ 05 декабря 2018

Решение: Если вы все еще не можете решить проблему, вы можете использовать пользовательский рендер и переписать событие кнопки Done.

в проекте iOS.

using System;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
using UIKit;
using Foundation;
using ObjCRuntime;
using CoreGraphics;

[assembly: ExportRenderer(typeof(MyPicker), typeof(MyPickerRenderer))]
namespace xxx.iOS
{
  public class MyPickerRenderer:PickerRenderer,IUIPickerViewDelegate,IUIPickerViewDataSource
  {
    string SelectedValue;

    public MyPickerRenderer()
    {
    }

    public nint GetComponentCount(UIPickerView pickerView)
    {
        return 1;
    }

    public nint GetRowsInComponent(UIPickerView pickerView, nint component)
    {
        return Element.Items.Count;
    }

    [Export("pickerView:titleForRow:forComponent:")]
    public string GetTitle(UIPickerView pickerView, nint row, nint component)
    {
        return Element.Items[(int)row].ToString();
    }

    [Export("pickerView:didSelectRow:inComponent:")]
    public void Selected(UIPickerView pickerView, nint row, nint component)
    {
        Control.Text = Element.Items[(int)row];
        SelectedValue= Element.Items[(int)row]; 
    }

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

        if(Control!=null)
        {
            SelectedValue = Element.Items[0];

            UIPickerView pickerView = (UIPickerView)Control.InputView;
            pickerView.WeakDelegate = this;
            pickerView.DataSource = this;


            UIToolbar toolbar = (UIToolbar)Control.InputAccessoryView;

            UIBarButtonItem done = new UIBarButtonItem("Done", UIBarButtonItemStyle.Done, (object sender, EventArgs click) =>
                {
                    Control.Text = SelectedValue;
                    toolbar.RemoveFromSuperview();
                    pickerView.RemoveFromSuperview();
                    Control.ResignFirstResponder();
                });
            toolbar.Items = new UIBarButtonItem[] { done };
        }

    }

  }
}

в формах

using System;
using Xamarin.Forms;
namespace app1
{
 public class MyPicker:Picker
 {
    public MyPicker()
    {
    }
 }
}

в xaml

 <local:MyPicker>               
  <local:MyPicker.ItemsSource>               
     <x:Array Type="{x:Type x:String}">                        
       <x:String>Baboon</x:String>
       <x:String>Capuchin Monkey</x:String>
       <x:String>Blue Monkey</x:String>
       <x:String>Squirrel Monkey</x:String>
       <x:String>Golden Lion Tamarin</x:String>
       <x:String>Howler Monkey</x:String>
       <x:String>Japanese Macaque</x:String>
     </x:Array>                    
   </local:MyPicker.ItemsSource>  
 </local:MyPicker> 

Примечание: Вот похожая проблема , на которую можно сослаться

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...