【发布时间】:2012-10-21 15:19:40
【问题描述】:
我有一个转换器应用程序,我希望它在我将数字(应该转换的)输入到文本字段时更新标签。我希望它自动更新,所以我不需要再次选择轮子上的单元来更新它。
这是我的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_convertFrom = @[@"MTPA", @"MMcf/day",
@"Mill.Sm3/day", @"MMBTU", @"Boe/day"];
_convertRates = @[ @1.0f, @133.4246575f, @3.780821918f,
@142465.7534f, @23780.8f];
_convertTo = @[@"MTPA", @"MMcf/day",
@"Mill.Sm3/day", @"MMBTU", @"Boe/day"];
_convertRates = @[ @1.0f, @133.4246575f, @3.780821918f,
@142465.7534f, @23780.8f];
}
}
我应该在这里做什么?
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
-(IBAction)textFieldReturn:(id)sender
{
[sender resignFirstResponder];
}
-(IBAction)backgroundTouched:(id)sender
{
[inputText resignFirstResponder];
}
#pragma mark -
#pragma mark PickerView DataSource
- (NSInteger)numberOfComponentsInPickerView:
(UIPickerView *)pickerView
{
return 2;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: (NSInteger)component
{
if (component == 0) {
return [_convertFrom count];
}
return [_convertTo count];
}
- (NSString *) pickerView: (UIPickerView *)pickerView
titleForRow:(NSInteger)row
forComponent:(NSInteger)component
{
if (component == 0) {
return [_convertFrom objectAtIndex:row];
}
return [_convertTo objectAtIndex:row];
}
#pragma mark -
#pragma mark PickerView Delegate
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
inComponent:(NSInteger)component
{
float convertFrom = [[_convertRates objectAtIndex:[pickerView selectedRowInComponent:0]] floatValue];
float convertTo = [[_convertRates objectAtIndex:[pickerView selectedRowInComponent:1]] floatValue];
float input = [inputText.text floatValue];
float to = convertTo;
float from = convertFrom;
float convertValue = input;
float relative = to / from;
float result = relative * convertValue;
NSString *convertFromName = [_convertFrom objectAtIndex:[pickerView selectedRowInComponent:0]];
NSString *convertToName = [_convertFrom objectAtIndex:[pickerView selectedRowInComponent:1]];
NSString *resultString = [[NSString alloc]initWithFormat:
@" %.4f %@ = %.4f %@",convertValue, convertFromName, result, convertToName];
resultLabel.text = resultString;
}
【问题讨论】:
-
您的意思是当您键入要执行转换计算的数字时?在您的屏幕截图中,我没有看到 UIPickerView,所以我无法弄清楚您在问什么。
-
@Walter 我希望它按照你在第一句话中所说的那样做。认为当您可以看到没有数字的标签,然后看到带有数字的文本字段时,这是可以理解的。我希望它立即说 123 = 452 :)
-
啊,那么下面Maddy的回答是正确的。您只需要从 textField 的委托方法调用您的转换函数。您要使用的方法是: - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 您应该调用进行转换的方法,然后让委托方法返回 YES 所以屏幕将更新。
-
@Walter - 这不是正确的方法。该方法将用于验证文本字段的输入。它不应该用于对文本字段的更改采取行动。请参阅我的更新答案。
标签: ios xcode uitextfield uilabel uipickerview