如何使用双分量选择器和文本字段输入在Xcode中编写计算代码

如何使用双分量选择器和文本字段输入在Xcode中编写计算代码,xcode,picker,Xcode,Picker,我正在尝试对iPhone/iPad屏幕进行编码,该屏幕根据在文本字段中输入的内容和在双组件选择器中选择的内容输出一个值。我已经完成了基础工作,直到输入/选择的数据出现,但还没有完成计算。我已经搜索了我能找到的每一个资源,并且使用了我找到的所有相关代码,正如您将在下面看到的 具体来说,我希望允许用户在一个文本字段中输入美元金额,选择支付频率(小时、每月等),选择他们希望转换为的支付频率,并在点击按钮时在另一个文本字段中查看结果。另一个按钮将清除字段,以便它们可以转换其他金额。更具体地说,如果他们想

我正在尝试对iPhone/iPad屏幕进行编码,该屏幕根据在文本字段中输入的内容和在双组件选择器中选择的内容输出一个值。我已经完成了基础工作,直到输入/选择的数据出现,但还没有完成计算。我已经搜索了我能找到的每一个资源,并且使用了我找到的所有相关代码,正如您将在下面看到的

具体来说,我希望允许用户在一个文本字段中输入美元金额,选择支付频率(小时、每月等),选择他们希望转换为的支付频率,并在点击按钮时在另一个文本字段中查看结果。另一个按钮将清除字段,以便它们可以转换其他金额。更具体地说,如果他们想知道他们每周310美元的工资是半月薪,他们会在第一个字段中输入“310”,在第一个选择器组件中选择“每周”,在另一个组件中选择“半月薪”,然后点击计算按钮。另一个字段将显示$671.67(310*52/24=671.67)

为了以防万一,在其上进行此操作的视图控制器与导航控制器相连,作为连接到主视图控制器的6个屏幕之一的5个屏幕之一(需要轻触几下才能到达此屏幕)

到目前为止,我可以在两个文本字段中输入数字,我可以旋转两个选择器组件,并使它们的选择显示在标签中,但这就是我被卡住的地方。我找不到如何实施它的例子

这是我的ViewController.h代码:

    @interface PayFrequencyViewController : UIViewController
<UIPickerViewDelegate, UIPickerViewDataSource>
{
    UIPickerView *payPicker;
    NSArray *fromArray;
    NSArray *toArray;
    NSArray *fromValues;
    NSArray *toValues;
    UILabel *resultText;
    UITextField *inputText;
}
@property (strong, nonatomic) IBOutlet UIPickerView *payPicker;
@property (strong, nonatomic) NSArray *fromArray;
@property (strong, nonatomic) NSArray *toArray;
@property (strong, nonatomic) NSArray *fromValues;
@property (strong, nonatomic) NSArray *toValues;
@property (strong, nonatomic) IBOutlet UILabel *resultText;
@property (strong, nonatomic) IBOutlet UITextField *inputText;
- (IBAction)Convert:(id)sender;
- (IBAction)Clear:(id)sender;
@end

我为冗长的帖子和格式不正确的代码道歉。我希望有人能告诉我哪些代码是不必要的,哪些是完成此任务所必需的。

谢谢Phillip对代码进行了重新格式化。我应该补充一点,键盘在选择任何一个文本字段后都不会消失,尽管代码应该会处理这些字段。好的,我在发布这个问题后学到了一些东西。包括如何进行基本计算。现在,看起来我需要学习如何在我的计算中加入一个2分量选择器。我已经完全重写了ViewController.m代码,包括将结果字段从文本字段更改为标签,这样就不会有人认为他们应该在那里输入任何内容。我现在还为每个选择器组件提供了两个相同的数组,这可能是多余的。我陷入困境的地方是试图将我所学的用于2组件选择器和进行计算的代码结合起来。您将在.m代码的viewDidUnload部分下看到问题所在。我可以使用Convert操作,也可以让它在输入输入和选择两个选择器组件时自动显示结果。谢谢你的帮助,谢谢Phillip,重新格式化代码。我应该补充一点,键盘在选择任何一个文本字段后都不会消失,尽管代码应该会处理这些字段。好的,我在发布这个问题后学到了一些东西。包括如何进行基本计算。现在,看起来我需要学习如何在我的计算中加入一个2分量选择器。我已经完全重写了ViewController.m代码,包括将结果字段从文本字段更改为标签,这样就不会有人认为他们应该在那里输入任何内容。我现在还为每个选择器组件提供了两个相同的数组,这可能是多余的。我陷入困境的地方是试图将我所学的用于2组件选择器和进行计算的代码结合起来。您将在.m代码的viewDidUnload部分下看到问题所在。我可以使用Convert操作,也可以让它在输入输入和选择两个选择器组件时自动显示结果。谢谢你的帮助。
    @interface PayFrequencyViewController ()

@end

@implementation PayFrequencyViewController
@synthesize payPicker;
@synthesize toArray;
@synthesize fromArray;
@synthesize toValues;
@synthesize fromValues;
@synthesize resultText;
@synthesize inputText;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    self.fromArray = [[NSArray alloc] initWithObjects:
                      @"Annual", @"Monthly", @"48/Year", @"SemiMonthly", @"BiWeekly", @"Weekly", @"Hourly", nil];

    self.fromValues = [[NSArray alloc] initWithObjects: 
                       [NSNumber numberWithFloat:1.0],
                       [NSNumber numberWithFloat:12.0], 
                       [NSNumber numberWithFloat:48.0],
                       [NSNumber numberWithFloat:24.0], 
                       [NSNumber numberWithFloat:26.0],
                       [NSNumber numberWithFloat:52.0], 
                       [NSNumber numberWithFloat:2080.0], nil];


    self.toArray = [[NSArray alloc] initWithObjects:
                      @"Annual", @"Monthly", @"48/Year", @"SemiMonthly", @"BiWeekly", @"Weekly", @"Hourly", nil];

    self.toValues = [[NSArray alloc] initWithObjects: 
                     [NSNumber numberWithFloat:1.0],
                     [NSNumber numberWithFloat:12.0], 
                     [NSNumber numberWithFloat:48.0],
                     [NSNumber numberWithFloat:24.0], 
                     [NSNumber numberWithFloat:26.0],
                     [NSNumber numberWithFloat:52.0], 
                     [NSNumber numberWithFloat:2080.0], nil];


    [super viewDidLoad];
    inputText.keyboardType = UIKeyboardTypeDecimalPad;
    // Do any additional setup after loading the view.
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    self.toArray = nil;
    self.fromArray = nil;
    self.resultText = nil;
    self.inputText = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {

    return 2;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {

    if (component == 0) {
        return [fromArray count];
    }
    return [toArray count];
}

- (NSString *)pickerView:(UIPickerView *)pickerView
             titleForRow:(NSInteger)row
            forComponent:(NSInteger)component
{
    if (component == 0) {
        return [fromArray objectAtIndex:row];
    }
    return [toArray objectAtIndex:row];
} 

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
      inComponent:(NSInteger)component {

//- (IBAction)Convert:(id)sender {

//    float valuein = [[fromValues text] floatValue];
//    float valueout = [[toValues text] floatValue];
//    [resultText setText:[NSString stringWithFormat:@"%6.2f", result]];
//    [inputText resignFirstResponder];

    float valuein = [[fromValues objectAtIndex:row] floatValue];
    float valueout = [[toValues objectAtIndex:row] floatValue];
    float input = [inputText.text floatValue];
    float result = input * valuein / valueout;
    NSString *resultString = [[NSString alloc] initWithFormat: @"$ %@", [toArray objectAtIndex:row]];
}

- (IBAction)Clear:(id)sender {
    inputText.text = @"";
    resultText.text = @"";
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    [inputText resignFirstResponder];
}

@end