Iphone 在另一个方法中调用一个方法?

Iphone 在另一个方法中调用一个方法?,iphone,Iphone,我有一个delegate方法,里面有一些代码,在输入的数字的末尾加上一个%号 - (void)textFieldDidEndEditing:(UITextField *)UItextfield { NSString *oldTextFieldValue = UItextfield.text; UItextfield.text = [NSString stringWithFormat:@"%@ %%",oldTextFieldValue]; } 我能不能用下面的动作来代

我有一个delegate方法,里面有一些代码,在输入的数字的末尾加上一个%号

- (void)textFieldDidEndEditing:(UITextField *)UItextfield {
     NSString *oldTextFieldValue = UItextfield.text;
     UItextfield.text = [NSString stringWithFormat:@"%@ %%",oldTextFieldValue];
   }
我能不能用下面的动作来代替这个动作

-(IBAction)Calculate:(UITextField *)UITextfield;
{
    NSString *oldTextFieldValue = UItextfield.text;
    UItextfield.text = [NSString stringWithFormat:@"%@ %%",oldTextFieldValue];
}
然后在委托函数中,调用该操作?差不多

-(void)textFieldDidEndEditing:(UITextField *)UItextfield {
[self Calculate:self]
}

我试过了,没用。我知道这会让我得到同样的结果,但我只是想知道这是否可以做到。我想我是在问一个方法(Calculate)是否可以在另一个方法(TextFieldDiEndEditing)中调用,以及如何调用。

您提供的是
self
作为您所在类的实例的方法参数。在本例中,这是错误的,因为方法参数应该是
UITextField
的实例。尝试在您的方法中使用
[self-Calculate:UItextfield]

在大多数编程语言中,从方法调用其他方法时经常发生。 这是一种将代码拆分并在不同位置重用代码的好方法,无需复制/粘贴

(这对您来说可能太基本了。很抱歉)

如果您也使用标准命名约定,事情可能更容易理解。('likeThis'表示变量和方法名;'likeThis'表示类名)

textField
这里是指向刚刚完成编辑的UITextField对象的指针。 您希望将此对象传递给新的“其他”方法

[self calculate:textField];
self
是指向当前类实例的指针。例如,在名为“MyViewController”的UIViewController子类中,self引用该类的当前实例。 由于
-calculate
方法是一种实例方法(以“-”开头),因此需要使用
self
。变量
textField
在冒号后传递

- (void)calculate: (UITextField*)textField {
NSString *oldTextFieldValue = textField.text;
textField.text = [NSString stringWithFormat:@"%@ %%",oldTextFieldValue];
}


当您希望从xib或故事板中的UIComponent调用方法时,请仅使用
iAction
关键字。

OK,效果非常好!谢谢,我有没有可能得到一点解释来帮助我理解?这是我的假设,请告诉我是否正确“self”是指当前对象,在本例中是指正在编辑的文本字段。Calculate是方法,UItextfield是需要传递的参数,在这种情况下,是正在编辑的参数吗?此外,如果将UITextfield作为方法Calculate和TextFieldDiEndediting方法的参数,将来会不会导致任何问题?Thanksself是类的当前实例。因此,调用[self Calculate:textfield]意味着当前实例应该使用方法参数textfield向方法Calculate发送一条消息。应该没有任何问题。如果我的答案对您有帮助,您可以将其标记为已接受。请尝试
[self-Calculate:UItextfield]。您发送了一个
self
,但我没有看到实现。
- (void)calculate: (UITextField*)textField {
NSString *oldTextFieldValue = textField.text;
textField.text = [NSString stringWithFormat:@"%@ %%",oldTextFieldValue];