gpt4 book ai didi

ios - 我怎样才能让 UIPickerview 自动更新 UILabel

转载 作者:可可西里 更新时间:2023-11-01 05:46:09 24 4
gpt4 key购买 nike

我有一个转换器应用程序,我希望它在我将数字(应该转换)输入文本字段时更新标签。我希望它自动更新,所以我不需要再次选择方向盘上的单位来更新。

enter image description here

enter image description here

这是我的代码:

- (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;



}

最佳答案

您的问题与选择器 View 无关。您想要监听文本字段的更改并根据输入到文本字段中的最新文本更新转换和标签。

  1. 设置一个方法,当它的值改变时在文本字段上调用。
  2. 选择器 View 委托(delegate)方法中计算转化率和更新标签的所有代码都需要放在另一个可以从两个地方调用的方法中。
  3. 在响应文本字段更改的新方法中,调用您刚刚创建的方法来执行转换并更新标签。

因此此时您的选择器 View 委托(delegate)方法和文本字段更改方法都调用从选择器获取转换和从文本字段获取文本的方法,然后进行转换,最后更新标签。

编辑:更多细节

像这样重构当前的选择器 View 委托(delegate)方法:

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
[self updateConversionLabel];
}

- (void)updateConversionLabel {
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;
}

然后您需要创建一个方法来处理对文本字段的更改:

- (void)textFieldChanged:(UITextField *)textField {
[self updateConversionLabel];
}

现在在 IB 中,将 textFieldChanged: 方法连接到 inputText 文本字段的“值更改”事件。我不使用 IB,所以我不知道这样做的确切术语。

关于ios - 我怎样才能让 UIPickerview 自动更新 UILabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12999137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com