如何在使用DecimalPad时隐藏键盘

10
我有一个带有自定义单元格的UITableView,其中包含一个TextField。我让DecimalPad出现,就像我们所知道的那样,没有“完成”键。之前,当我在普通UIView上拥有一个“仅限小数”的文本字段时,我解决了这种类型的问题,方法是处理TouchesEnded事件,然后检查TextField是否是第一响应者,如果是,则会退出,但是如果这种技术现在可行,那么我无法弄清楚我应该使用谁的TouchesEnded(是包含所有内容的UIViewUITableView,单元格,单元格控制器还是文本字段..我想我已经尝试了所有的东西)。
我希望有另一种更简洁的方法来处理这个问题。
有人能提供帮助吗?
4个回答

12

我认为David的想法是最好的 - 这里是一些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;
    }
}

这太棒了,谢谢。考虑到这是在自定义单元格上,位于UITAbleView和UIView上,我应该将其放在单元格控制器还是UIView中? - Driss Zouak
这是一个好问题...我认为你会想把它放在单元控制器中。 - Luke
实际上,我只是将它放在“根”UIView上,它就像魔法般地工作了。太神奇了。 - Driss Zouak

9

如果你的目标是 iOS 4.0 或更高版本,你可以创建一个包含“完成”按钮的inputAccessoryView并附加到键盘上。点击该按钮时将关闭键盘。这里是一个简单的 inputAccessoryView 的示例(来自官方文档)


3
当用户点击背景时,您可以将其忽略;我认为这是最直观的方法。
在界面构建器中,将您的视图类更改为UIControl。这是UIView的子类,因此您的程序将以相同的方式工作,但您还可以获得标准的触摸事件。
从这里开始很简单,为Touch Down事件创建一个方法:
[numberField resignFirstResponder] 当然,使用MonoTouch可能会稍有不同--不幸的是,我对此并不了解,但我想帮助您。
希望您能理解这个概念,并相应地修改您的代码。

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];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接