使用DecimalPad时如何关闭键盘

时间:2011-04-03 23:35:19

标签: iphone keyboard xamarin.ios

我有一个UITableView,其自定义单元格为TextField。我有 DecimalPad ,我们都知道,没有完成密钥。我以前通过处理TouchesEnded事件然后检查TextField是否是第一个响应者来检查TouchesEnded是否是第一个响应者时,在正常UIView上有“仅十进制”文本字段时解决了这类问题,如果是,然后它会辞职,但是如果这种技术现在可以起作用那么我就无法弄清楚我应该使用UIView的人UITableView所有内容都出现在{{1}}上,Cell,CellControler,TextField ..我想我已经尝试了一切)。

我希望有另一种更清洁的方法来解决这个问题。

任何?

4 个答案:

答案 0 :(得分:12)

I think David has the best idea - 这里有一些Monotouch代码可以帮助您入门。您需要将它放在显示小数点的视图控制器中:

UIView dismiss;

public override UIView InputAccessoryView 
{
    get 
    {
        if (dismiss == null)
        {
            dismiss = new UIView(new RectangleF(0,0,320,27));
            dismiss.BackgroundColor = UIColor.FromPatternImage(new UIImage("Images/accessoryBG.png"));          
            UIButton dismissBtn = new UIButton(new RectangleF(255, 2, 58, 23));
            dismissBtn.SetBackgroundImage(new UIImage("Images/dismissKeyboard.png"), UIControlState.Normal);        
            dismissBtn.TouchDown += delegate {
                 textField.ResignFirstResponder();
            };
            dismiss.AddSubview(dismissBtn);
        }
        return dismiss;
    }
}

答案 1 :(得分:9)

如果您的目标是iOS 4.0或更高版本,则可以创建一个inputAccessoryView,其中包含一个Done按钮,可以连接到键盘,以便在点按时关闭键盘。 Here是有关创建简单inputAccessoryView的文档中的示例。

答案 2 :(得分:3)

当用户点击背景时,您可以将其关闭;我认为这是最直观的方式。

在Interface Builder中,将View的类更改为UIControl。这是UIView的子类,因此您的程序将以相同的方式工作,但您也可以获得标准的触摸事件。

从这里开始很简单,为 Touch Down 事件创建一个方法:
[numberField resignFirstResponder]

当然,MonoTouch可能略有不同 - 遗憾的是我不太了解它,但希望提供帮助。
希望您可以使用该概念,并相应地修改您的代码。

答案 3 :(得分:0)

或者您可以在主视图中添加一些手势。 例如:

//Just initialise the gesture you want with action that dismisses your num pad
-(void)textFieldDidBeginEditing:(UITextField *)textField
{    
     UISwipeGestureRecognizer *swipeToHideNumPad = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(hideNumPad:)];
            swipeToHideNumPad.delegate = self;
            swipeToHideNumPad.direction = UISwipeGestureRecognizerDirectionDown;
            [swipeToHideNumPad setNumberOfTouchesRequired:1];

            [self.view addGestureRecognizer:swipeToHideNumPad];
}


//action
- (void)hideNumPad:(UIGestureRecognizer *)gestureRecognizer
{
    [self.amountTextField resignFirstResponder];
}