2017-02-12 5 views
3

У меня есть сборщик xamarin со списком элементов, и я хочу удалить сборщик, когда кнопка «done» нажата на iPhone и кнопку «Oke» на Android.
У меня есть код для удаления сборщика. Но я не знаю, что это за событие.Event_Handler кнопки «Готово» выбора

Код:

Picker picker = new Picker 
    { 
     Title = "What's in the slot?", 
     VerticalOptions = LayoutOptions.CenterAndExpand 
     //HorizontalOptions = LayoutOptions.Center 

    }; 

private void Displaypickerview(int row, int column) 
    { 
     if (status == "filling board") 
     { 
      foreach (string text in pickerText) 
      { 


picker.Items.Add(text); 
     } 
     foreach (string ore in oreLevels) 
     { 
      picker.Items.Add(ore); 
     } 


     picker.SelectedIndexChanged += (sender, args) => 
     { 
      if (picker.SelectedIndex == -1) 
      { 

      } 
      else 
      { 
       //change value of cell and button 
       Picker picker = (Picker)sender; 
       int index = picker.SelectedIndex; 

       if (index < pickerText.Length) 
       { 
        board[row, column].Text = pickerText[index - 1]; 
       } 
       else { 
        board[row, column].Text = oreLevels[index - 1 - pickerText.Length]; 
       } 
      } 
     }; 
    } 
    else if (status == "choosing item") 
    { 

    } 

} 

Пример того, что он выглядит как на iPhone:

Picker

+0

Не можете удалить его в SelectedIndexChanged обработчика событий? – mm8

+0

Я пробовал это, но мое приложение падает с нулевым исключением, и оно закрывает сборщик каждый раз, когда пользователь прокручивает – Cing

+0

. На какой конкретной строке кода возникает исключение? – mm8

ответ

4

К сожалению, вы не можете использовать то же событие для Android и прошивки в вашем случае, потому что:

В настоящее время элемент управления Picker отправляет событие SelectedIndexChanged на Android после OK bu tton нажата. Тем не менее, на прошивке события отправляется всякий раз, когда пользователь прокручивает сборщик и позволяет ему остановиться на пункте

Это известная проблему, я беру цитату из here.

Вы должны комбинировать события SelectedIndexChanged и Unfocus для достижения своей цели. Вы можете найти некоторые решения здесь, в этой теме https://forums.xamarin.com/discussion/20847/picker-selection-event

UPD: Похоже, я не понял ваш вопрос правильно. Если бы я сделал это прямо сейчас, так что вам нужно использовать собственные средства визуализации и указать в них необходимую логику.

Для iOS. Создать пользовательский визуализатор унаследованный от PickerRenderer и реализовать что-то подобное:

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

     var extendedPicker = e.NewElement as ExtendedPicker; 
     if (extendedPicker == null) return; 

     var toolbar = new UIToolbar(new CGRect(0.0f, 0.0f, Control.Frame.Size.Width, 44.0f)); 

     toolbar.Items = new[] 
     { 
      new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace), 
      new UIBarButtonItem("Done", 
       UIBarButtonItemStyle.Done, 
       delegate { 
        Control.ResignFirstResponder(); 
       }) 
     }; 

     if (this.Control != null) 
     { 
      Control.InputAccessoryView = toolbar; 
     } 
    } 

Для Andorid выглядит, как он работает из коробки

+0

У меня есть поиск в Интернете, но я не мог найти объяснения того, какие фокусы и не сфокусированные средства вы могли бы объяснить? – Cing

+0

См. Мое обновление в ответе – kudrya

+0

Извините за вопрос о nooby, но как мне наследовать что-то? – Cing

Смежные вопросы