0

问这个问题我感觉不好。我在 SO 上看过几次,但我不明白答案。我有一个在单独视图中制作的自定义键盘。它适用于一个文本框。但是现在我想要多个文本框,键盘将在其中输入数字。我已将视图控制器设置为文本字段委托,并且当您输入任一文本框时,我的自定义键盘会弹出。但是,我必须设置数字的代码仅适用于其中一个文本框。所以我想检查一下选择了哪个文本框,所以我将在那个框中进行编辑。我使用了方法 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 并尝试了以下代码...

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if ([numberOne isFirstResponder]) 
{
    [self.numberOne = currentTextField];    
}
else if ([numberTwo isFirstResponder])
{
    [self.numberTwo = currentTextField];
}    
}

currentTextField 是一个 UItextField。然后我想在下面的代码中替换 currentTextField 来替换 numberOne。

- (IBAction)buttonPressed:(UIButton *)sender 
{
NSString *button = [sender currentTitle];
NSRange decimalpoint = [self.numberOne.text rangeOfString:@"."];
if (self.userIsEnteringANumber)
{
    if ([button isEqualToString:@"."] && decimalpoint.location != NSNotFound)
    {
        self.numberOne.text = self.numberOne.text;
    }else 
        self.numberOne.text = [self.numberOne.text stringByAppendingString:button];
}else 
{
    self.numberOne.text = button;
    self.userIsEnteringANumber = YES;
}
}

但是,编译器不喜欢我的行 [self.numberOne = currentTextField]; 我尝试遵循其他一些建议,但不幸的是我不明白他们在说什么。有没有人给我新手指导?提前非常感谢。

我在宽敞的帮助下修复了编译器问题。谢谢。我的 textFieldShouldBeginEditing 方法现在是...

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if ([numberOne isFirstResponder]) 
{
    self.currentTextField = self.numberOne;    
}
else if ([numberTwo isFirstResponder])
{
    self.currentTextField = self.numberTwo;
}
return YES;
} 

我将 IBAction buttonPressed 更改为以下...

- (IBAction)buttonPressed:(UIButton *)sender 
{
NSString *button = [sender currentTitle];
NSRange decimalpoint = [self.currentTextField.text rangeOfString:@"."];
if (self.userIsEnteringANumber)
{
    if ([button isEqualToString:@"."] && decimalpoint.location != NSNotFound)
    {
        self.currentTextField.text = self.currentTextField.text;
    }else 
        self.currentTextField.text = [self.currentTextField.text stringByAppendingString:button];
}else 
{
    self.currentTextField.text = button;
    self.userIsEnteringANumber = YES;
}
}

现在发生了一些奇怪的事情。当我单击第一个文本字段时,键盘出现但没有任何反应,然后我点击第二个文本字段并在第一个文本字段中开始编辑。如果我单击第一个文本字段,编辑将从第二个开始。任何帮助,将不胜感激!!

4

1 回答 1

0

好吧,我可以回答您的编译器问题-

要分配对 currentTextField 的引用,它应该是:

currentTextField = self.numberOne;

发送消息(调用对象的方法)时使用括号。

您将作业包裹在括号中,并且作业的方式错误。

(您目前正在用 currentTextField 覆盖您对 textFields 的引用)

我需要查看更多代码才能进一步诊断!祝你好运

编辑:(这些是未经测试的更改,但你会明白的)

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if ([numberOne isFirstResponder] ) 
{
    self.currentTextField = self.numberOne;
    self.userIsEnteringANumber = NO;
}
else if ([numberTwo isFirstResponder])
{
    self.currentTextField = self.numberTwo;
    self.userIsEnteringANumber = NO;

}    
}
于 2012-07-28T22:26:07.520 回答