如何隐藏数字键盘,我使用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()
最终结果如下所示: