2017-10-17 49 views
0

在我的xamarin.android项目中,我有一个使用edittext的屏幕,它的类型为numberdecimal。在这里我得到keyPress上的textchanged事件,并使用下面的方法向左边添加 数字。 这是代码。Xamarin中的UITextField KeyPress Handler.IOS

namespace MobileApplication.Droid 
{ 
    [Activity(Label = "TransferScreen2Activity", ScreenOrientation = ScreenOrientation.Portrait, Theme = "@style/MyTheme")] 
    public class TransferScreenActivity : BaseActivity, IOnTouchListener 
    { 
    Button _nextButton;  
    EditText _amountEditText; 
    bool _triggerTextChangedforAmountEntry = true; 
    protected override async void OnCreate(Bundle savedInstanceState) 
     { 

      base.OnCreate(savedInstanceState); 
      SetContentView(Resource.Layout.transferscreen2); 
     _nextButton = FindViewById<Button>(Resource.Id.btnNext); 

      _amountEditText = FindViewById<EditText>(Resource.Id.etTransactionAmount); 
      _amountEditText.SetSelection(_amountEditText.Text.Length); 

      _amountEditText.TextChanged += _amountEditText_TextChanged; 

      _amountEditText.SetOnTouchListener(this); 
    } 

    private void _amountEditText_TextChanged(object sender, Android.Text.TextChangedEventArgs e) 
     { 
      if (_triggerTextChangedforAmountEntry) 
      { 
       _triggerTextChangedforAmountEntry = false; 
       string pressedKey = ""; 
       if (e.Text.Count() < (e.Start + 1)) 
       { 
        pressedKey = ""; 
       } 
       else 
       { 
        pressedKey = e.Text.ToString()[e.Start].ToString(); 
       } 


       if (!string.IsNullOrEmpty(pressedKey)) 
       { 
        CalculateAmountAfterKeyPress(pressedKey, e.Start); 

       } 
       else 
       { 
        CalculateAmountAfterKeyPress("←", 0); 
       } 

       _amountEditText.SetSelection(_amountEditText.Text.Length); 
       _triggerTextChangedforAmountEntry = true; 
      } 
     } 

    private void CalculateAmountAfterKeyPress(string key, int cursorPosition) //appending method. 
     { 
      string currentText = ""; 
      if (key == "←") 
      { 
       currentText = _amountEditText.Text.Trim().Replace("$", ""); 
      } 
      else 
      { 
       currentText = _amountEditText.Text.Trim().Remove(cursorPosition, 1).Replace("$", ""); 
      } 

      string result = "0"; 
      bool isProperValue = false; 
      switch (key) 
      { 
       case "0": 
       case "1": 
       case "2": 
       case "3": 
       case "4": 
       case "5": 
       case "6": 
       case "7": 
       case "8": 
       case "9": 
        isProperValue = Common.ShiftLeftandAppendChar(currentText, key, out result); 

        break; 
       case "←": 
        isProperValue = Common.ShiftRight(currentText, out result); 
        break; 
       case "C": 
        isProperValue = true; 
        result = "0.00"; 
        break; 
       default: 
        isProperValue = true; 
        break; 
      } 

      _amountEditText.Text = Resources.GetString(Resource.String.CurrencySymbol) + result; 
      if (!isProperValue) 
      { 
       Common.ShakeAnimation(this, _amountEditText); 
      } 
     } 

    public bool OnTouch(View v, MotionEvent e) 
     { 
      _amountEditText.OnTouchEvent(e); 
      _amountEditText.SetSelection(_amountEditText.Text.Length); 
      return true; 
     } 
} 

我的问题是..我希望复制Xamarin.ios..and整个事情我是很新的这xamarin.ios。任何人都可以请指导我 来实现这一个。请让我知道是否有任何其他解决方法来做到这一点。

这里是xamarin.ios代码(不完全)

namespace MobileApplication.iOS 
{ 
    public partial class FundTransferScreenController : BaseViewController 
     { 
     public FundTransferScreenController(IntPtr handle) : base(handle) 
      { 
      } 

      public override async void ViewDidLoad() 
      { 
        base.ViewDidLoad(); 
      amountValue.ValueChanged += HandleTextChanged; 

       } 

     } 

     private void HandleTextChanged(object sender, EventArgs e) 
     { 
      //how to do it like android code..? 
     } 
    public override void TouchesBegan(NSSet touches, UIEvent evt) 
     { 
      base.TouchesBegan(touches, evt); 
      amountValue.ResignFirstResponder(); 
     } 
} 

回答

0

你可以很容易地做到这一点,尽管它在iOS中被包裹的不同。与代表处理它,而不是事件处理

设置你的文本字段的委托this,在你的控制器:

field.Delegate = this; 

确保您的控制器实现IUITextFieldDelegate

然后实现以下方法:

[Export("textField:shouldChangeCharactersInRange:replacementString:")] 
    public bool ShouldChangeCharacters(UITextField textField, NSRange range, string replacementString) 
    { 
     return true; 
    } 

每次文本更改时都会调用这个函数,并且您还可以从函数中获取值。