Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 有人能告诉我一种更有效的方法来处理多个文本字段委托吗?_Ios_Objective C - Fatal编程技术网

Ios 有人能告诉我一种更有效的方法来处理多个文本字段委托吗?

Ios 有人能告诉我一种更有效的方法来处理多个文本字段委托吗?,ios,objective-c,Ios,Objective C,我正在做一个项目,用户有5个文本字段来输入数据。 “计算”按钮根据用户输入计算所需的计算。 我的解决方案是创建5个IBOutlet UITextFields并将它们连接到一个xib文件中。每个文本字段使用以下代码处理基于输入的事件。有人能告诉我解决这个问题的有效方法吗 - (BOOL)textFieldShouldReturn:(UITextField *)textField{ if(textField == self.numberOfNightsTF){ self.numberOf

我正在做一个项目,用户有5个文本字段来输入数据。 “计算”按钮根据用户输入计算所需的计算。 我的解决方案是创建5个IBOutlet UITextFields并将它们连接到一个xib文件中。每个文本字段使用以下代码处理基于输入的事件。有人能告诉我解决这个问题的有效方法吗

 - (BOOL)textFieldShouldReturn:(UITextField *)textField{

if(textField == self.numberOfNightsTF){
    self.numberOfNights = [self.numberOfNightsTF.text intValue];
    NSLog(@"The number of nights is set to %.d days", self.numberOfNights);

}
else if(textField == self.nightlyChargeTF){
    self.nightChargeCost = [self.nightlyChargeTF.text floatValue];
    NSLog(@"The cost of charge per night is set to %.2f$", self.nightChargeCost);
}

else if(textField == self.roomServiceTF){
    self.roomServiceCost = [self.roomServiceTF.text floatValue];
    NSLog(@"The additional room service cost is set to %.2f$", self.roomServiceCost);
}

else if(textField == self.telephoneTF){
    self.telephoneCost = [self.telephoneTF.text floatValue];
    NSLog(@"The additional telephone service cost for telephone is set to %.2f$", self.telephoneCost);
}
else if(textField == self.miscCostTF){
    self.miscCost = [self.miscCostTF.text floatValue];
    NSLog(@"The miscellaneous is now set to %.2f$", self.miscCost);
}
[textField resignFirstResponder];
return YES;

}有两种解决方案可以帮助清理

最简单的方法是在当前使用的函数中使用as switch语句,这有助于提高可读性

另一个选项是创建一个类别,该类别允许您将回调块设置为在调用每个委托方法时触发。这些都很容易编写,Github上已经有一些示例:

我推荐,因为它还添加了对其他类的块支持,如UIAlertView、KVO等

如果你想完全采用被动风格,这是一个非常全面的框架,也提供了类似的功能


BlocksKit要轻得多,如果你习惯了块风格的编程,它也很容易阅读,由于ReactiveCocoa的学习曲线陡峭,因此需要更大的投入,但它也提供了一些优秀的功能,如@strongify和@weakify,以帮助解决块保留问题。

您处理这一问题的方式并没有真正的无效性,它与其他方法一样好。这种方法唯一真正的问题是,当多次应用这种方法时,会导致ViewController类膨胀


随着您在面向对象环境中获得更多经验,您将了解MVC,您在此处修改的状态变量将是模型对象的属性,而不是自我假设此代码位于someViewController中,因此消息可能是self.model.telephoneCost=。。。。。等等。

标题可以改写,但这个问题显示了足够的研究和代码,可以保证保持开放。