将UITextField值传递给View中的函数

时间:2014-06-21 20:56:53

标签: ios function uitextfield scope

我刚刚开始使用XCode和iOS编码,有以下问题。我想添加一个函数,该函数根据UITextField中的值设置ViewController中的UIStepper值。代码实际上处理格式化三个UITextField,将其剪切为一个以缩短示例。这段代码工作正常:

- (IBAction)Temp_Stepper_Changed:(UIStepper *)sender {
    integer_t stepperValue = (integer_t) sender.value;
    NSString *temp_format = [[NSString alloc]
                             initWithFormat: @"%%.%df",stepperValue];
    double fahrenheit = [_TempF_Text.text doubleValue];
    NSString *FresultString = [[NSString alloc]
                               initWithFormat: temp_format,fahrenheit];
    _TempF_Text.text = FresultString;
}

我有几个地方想做这个,所以想要创建一个函数来调用,所以我把这个函数放到了视图控制器的.m文件中:

void Temp_Text_Update (double F_Temp){
    NSString *FresultString = [[NSString alloc]
                               initWithFormat: @"%.2f",F_Temp];
    _TempF_Text.text = FresultString;
}

该函数无法编译,导致错误:

use of undeclared identifier '_TempF_Text'

没有这行,它编译得很好,可以调用函数,传递值等等。我假设(记住,从这开始)因为UIStepper在其范围内有_TempF_Text,函数在同一个.m文件中也是如此。幕后是否有一些神奇的事情允许IBAction类型调用访问ViewController项中的任何值,但我的功能是否缺少魔法?我还需要UIStepper值才能完成该功能。这是使用Storyboard构建的,对出口和操作进行控制拖动,头文件为:

@interface TemperatureViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITextField *TempF_Text;
@property (weak, nonatomic) IBOutlet UIStepper *Temp_Stepper;

- (IBAction)TempF_CnvButton:(id)sender;
- (IBAction)Temp_Stepper_Changed:(UIStepper *)sender;

我花了几个小时搜索,包括这个网站,发现了从ViewController到另一个{{1}}的引用,等等,但是并不匹配;无论如何都尝试了一些东西,但没有任何效果(虽然有些产生了额外的错误)。我怀疑它是如此明显和简单,以至于没有被问到,但我已经没有想法了,任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

要回答具体问题,您尝试编写的签名的正确语法如下所示:

- (void)Temp_Text_Update:(double)F_Temp {

这说明我们有一个名为Temp_Text_Update的方法:它接受一个名为F_Temp的双参数,并且不会返回任何内容。

更通用的解决方案是使用NSNumberFormatter以区域设置敏感的方式在字符串和双精度之间进行处理,如下所示:

// get a double from a string
- (double)doubleFromString:(NSString *)string {

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    [formatter setNumberStyle:NSNumberFormatterDecimalStyle];

    NSNumber *number = [formatter numberFromString:string];
    return [number doubleValue];
}

// get a string from a double: 
- (NSString *)stringFromDouble:(double)aDouble {

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    [formatter setNumberStyle:NSNumberFormatterDecimalStyle];

    return [formatter stringFromNumber:[NSNumber numberWithDouble:aDouble]];
}

然后你的计算功能如下:

NSString *text = self.someControlView.text;
double aDouble = [self doubleFromString:text];

// do computation on aDouble, resulting in
double result = // whatever
[self setOutputTextWithResult:result];

最后,你的方法(更好的命名):

- (void) setOutputTextWithResult:(double)result {
    self.someControlView.text = [self stringFromDouble:result];
}

现在它太短了,它几乎不需要它自己的方法。