我有一个带有自定义数字键盘的应用程序。对于首选项视图中的某些但不是全部文本字段,我需要自定义数字键盘。我已经编写了此方法来为某些文本字段设置数字键盘:

-(void)setNumberPadFor:(UITextField*)textField andNibName:(NSString *)nibNamed{

    textField.inputView = [[[NSBundle mainBundle] loadNibNamed:nibNamed
                                                         owner:self
                                                       options:nil] lastObject];

    UIBarButtonItem *btnDone = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                                                                style:UIBarButtonItemStyleDone
                                                               target:textField
                                                               action:@selector(resignFirstResponder)];

    UIToolbar *tips = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    tips.barStyle = UIBarStyleBlackOpaque;
    [tips setBackgroundColor:[UIColor blueColor]];
    [tips setTintColor:[UIColor whiteColor]];
    UIBarButtonItem *spacer = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                                                           target:nil
                                                                           action:nil];
    [tips sizeToFit];
    tips.items = [NSArray arrayWithObjects:spacer, btnDone, nil];
    textField.inputAccessoryView = tips;
}


我正在调用设置方法,如下所示(在ViewController的viewDidLoad中):

[self setNumberPadFor:txtMinFeet andNibName:@"PosNegNumberPad"];
[self setNumberPadFor:txtMaxFeet andNibName:@"PosNegNumberPad"];


因此,在按钮单击事件中,如何访问启动数字键盘的文本字段?

-(IBAction)btnNum1:(id)sender{
    [[UIDevice currentDevice] playInputClick];
    // update text field
}
-(IBAction)btnNum2:(id)sender{
    [[UIDevice currentDevice] playInputClick];
    // update text field
}


最终,我将有两个自定义数字键盘来满足要求,但现在只有一个(因此,当前将一个笔尖作为参数传递)。

我的按钮动作已设置并且可以正常工作,也就是说,我可以在其中设置一个断点并验证应用程序是否对事件做出响应。

我不清楚的是如何识别哪个文本字段启动了数字键盘,因此我可以进行相应的更新。

显然我遗漏了一些东西。有什么建议么?谢谢!

最佳答案

一种方法是使用ivar,并且每次获得委托方法textFieldDidBeginEditing时,都要设置ivar。稍后,您查询ivar以获取当前文本字段。

另一种方法是找到第一响应者。这意味着遍历主视图的子视图以找到它。这很常见,您可以在此处确定要执行此操作的代码。另一种方法是最容易做到的。

07-27 14:03