2017-02-12 40 views
3

我有一個xamarin選擇器的項目列表,我想在iPhone上的「完成」按鈕和android上的「Oke」按鈕時移除選擇器。
我有刪除選取器的代碼。但我不知道可能通過什麼event_Handler。選擇器的完成按鈕的Event_Handler

代碼:

Picker

+0

Works無法刪除它在你的SelectedIndexChanged事件處理程序? – mm8

+0

我嘗試過,但我的應用程序崩潰,出現空異常,並且每次用戶颳起時它都會關閉選取器 – Cing

+0

關於哪一行代碼會發生異常? – mm8

回答

4

不幸的是,你不能在你的情況下,使用Android和iOS相同的事件,因爲:什麼它看起來像iPhone

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") 
    { 

    } 

} 

當前Picker控件在OK bu後發送Android上的SelectedIndexChanged事件tton被按下。然而,在iOS發送事件每當用戶滾動選擇器,讓它停在一個項目

它是已知的問題,我把報價從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