2017-10-17 5 views
0

Dans mon projet xamarin.android, j'ai un écran dans lequel edittext a été utilisé, qui est de type numberdecimal. ici je reçois l'événement textchanged sur keypress et en ajoutant le numéro à gauche en utilisant la méthode comme ci-dessous. Voici le code.UITextField KeyPress Handler dans Xamarin.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; 
     } 
} 

Ma question est ..Je à répliquer le tout dans Xamarin.ios..and je suis très nouveau à cette xamarin.ios. Quelqu'un peut-il s'il vous plaît me guider pour atteindre celui-ci.S'il vous plaît laissez-moi savoir s'il existe une autre solution de contournement pour faire celui-ci.

est ici xamarin.ios code (incomplet)

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(); 
     } 
} 

Répondre

0

Vous pouvez obtenir assez facilement que, même si elle a été différemment enveloppé dans iOS. Poignée avec les délégués, non gestionnaires d'événements

Définir vos délégué TextField à this, dans votre contrôleur:

field.Delegate = this; 

Assurez-vous que votre contrôleur implémente IUITextFieldDelegate

mettre en œuvre ensuite comme suit la méthode:

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

Cela s'appelle chaque fois que le texte change, et vous pouvez également obtenir la valeur de la fonction.