2013-07-20 61 views
2

我想在按下textview(x)時執行一些操作(重置搜索)。用Xamarin捕獲iOS UITextField清除事件

事情是這樣的:iPhone perform action when UITextField/UISearchBar's clear button is pressed,但我不知道如何與Xamarin

做,我有這樣的:

tbkSearchOrder.ShouldReturn += (textField) => { 
    ComboViewCtl.OnOrdersFiltered (this, tbkSearchOrder.Text); 
    return true; 
}; 

它響應上按下鍵盤上的「搜索」按鈕。 UITextField有幾個名爲類似的方法,但它們是方法,而不是事件或動作或委託。理想情況下,我會避免爲該文本字段寫一個大型的Delegate類。

回答

7

他們是方法,因爲他們實際上返回一個值。 C#事件只是接收objet發送的事件的一種方式。

當UITextField啓動時(顯示鍵盤並且對象已準備好管理輸入事件),將發送已啓動的事件。你可以用這一個清除的UITextField

UITextField textField = new UITextField(); 
textField.Started += delegate { 
    textField.Text = null; 
}; 

對於操控性上清除按鈕的龍頭(這是可悲的不是一個事件,但文本字段將是無論如何清除如果委託返回true):

UITextField textField = new UITextField(); 
textField.ShouldClear += delegate { 
    // Insert the handling here 
    return true; 
}; 
+0

我不需要清除文本字段,我需要重新設置搜索過濾器時,文本字段被清除 –

+0

我的壞。看到我更新的回覆。 – rFlex

+0

+1謝謝!顯然,在C#綁定「ShouldClear」是一個屬性(委託),而不是一個事件,所以我已經錯過了,而通過名單看 –

3
  this.sampleTextField1.ShouldReturn += (textField) => { 
       sampleTextField2.BecomeFirstResponder(); 
       textField.ResignFirstResponder(); 
       return true; 
      }; 

      this.sampleTextField1.ShouldBeginEditing += (textField) => { 
       //Write here 
       return true; 
      }; 

      this.sampleTextField1.ShouldEndEditing += (textField) => { 
       //Write here 
       return true; 
      }; 
      this.sampleTextField1.ShouldClear += (textField) => { 
       //Write here 
       return true; 
      }; 

      this.sampleTextField1.ShouldChangeCharacters = (UITextField txt, NSRange range, string sampleTxt) => { 
       var newLength = txt.Text.Length + sampleTxt.Length - range.Length; 
       return newLength <= 9; 

      }; 
+0

我不明白這個答案是如何改進我已經接受的答案:多更多的代碼,不相關的代碼(.Alpha = 1.0f),它顯示代表,但不告訴你在哪裏處理所需的事件。很差的答案 –

+0

@ Sten:最好的做法是將代理添加到viewDidLoad(this.enableUITextFieldDelegateMethods();。我使它成爲一個單獨的方法)。請看看@ https://github.com/alvinreuben/BasicUI-Xamarin –

+0

仍然有太多不相關的垃圾讓讀者看到這個陳述 –