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