如何隐藏数字键盘,我使用Xamarin iOS(C#)

我发现在Objective-C上的问题的答案,但我不在Xamarin iOSsearch。 所以我有用户写电话号码的字段,这个字段编辑时出现键盘,数字键盘types。 但是这个键盘不会隐藏,也没有隐藏button。

在android应用程序中为这个问题我使用代码:

one.Click += delegate { InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService); imm.HideSoftInputFromWindow(ulitsa.WindowToken, 0); }; 

在我的iOS应用程序这个代码不起作用。 我在iOS的代码:

  tel.ShouldReturn = delegate { tel.ResignFirstResponder (); //tel.ReturnKeyType = UIReturnKeyType.Done; return true; }; 

此代码适用于默认键盘types。 在键盘types的数字键盘我有截图的结果:

在这里输入图像说明

我如何解决我的问题?

你可以看到这个博客 。 它可能会帮助你很多。

 public override void ViewDidLoad () { base.ViewDidLoad (); // Your stuff NSNotificationCenter.DefaultCenter.AddObserver ("UIKeyboardWillShowNotification", KeyboardWillShow); } public void KeyboardWillShow(NSNotification notification) { var doneButton = new UIButton (UIButtonType.Custom); doneButton.Frame = new RectangleF (0, 163, 106, 53); doneButton.SetTitle ("DONE", UIControlState.Normal); doneButton.SetTitleColor (UIColor.Black, UIControlState.Normal); doneButton.SetTitleColor (UIColor.White, UIControlState.Highlighted); doneButton.TouchUpInside += (sender, e) => { // Make the Done button do its thing! The textfield shouldn't be the first responder _txtNumbers.ResignFirstResponder(); }; // This is the 'magic' that could change with future version of iOS var keyboard = _txtNumbers.WeakInputDelegate as UIView; if (keyboard != null) { keyboard.AddSubview (doneButton); } } 

或者你也可以这个代码

  this.View.EndEditing(true); 

您可以使用helpers方法创build一个Base类,该方法可以在其他ViewController中使用。

即:

 /// <summary> /// Base class for Controllers that inherit from UIViewController /// </summary> public class SimpleViewControllerBase : UIViewController { public SimpleViewControllerBase(IntPtr handle) : base(handle) { } /* This will add "Done" button to numeric keyboard */ protected void AddDoneButtonToNumericKeyboard(UITextField textField) { UIToolbar toolbar = new UIToolbar(new RectangleF(0.0f, 0.0f, 50.0f, 44.0f)); var doneButton = new UIBarButtonItem(UIBarButtonSystemItem.Done, delegate { textField.ResignFirstResponder(); }); toolbar.Items = new UIBarButtonItem[] { new UIBarButtonItem (UIBarButtonSystemItem.FlexibleSpace), doneButton }; textField.InputAccessoryView = toolbar; } } 

然后在你的实际ViewControllers中,你可以这样做:

 public partial class ViewController : SimpleViewControllerBase { public ViewController (IntPtr handle) : base (handle) { } public override void ViewDidLoad() { base.ViewDidLoad(); AddDoneButtonToNumericKeyboard("NumericTextFieldName"); } } 

当然,你必须在故事板中定义数字文本字段的名称。

关键是要有一个像AddDoneButtonToNumericKeyboard()

最终结果如下所示: 在这里输入图像说明