Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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 我正在尝试用Xcode制作一个转换计算器_Ios_Objective C_Xcode - Fatal编程技术网

Ios 我正在尝试用Xcode制作一个转换计算器

Ios 我正在尝试用Xcode制作一个转换计算器,ios,objective-c,xcode,Ios,Objective C,Xcode,我已经建立了基本的,它包括一个选择器。因此,无论用户从选择器中选择什么转换单位,标签都应该更新,以显示转换单位的名称,一旦用户在文本框中输入数字并点击按钮,答案应该显示在第二个文本框中。现在代码执行了,但问题是无论我在选择器中选择什么,它总是进行权重转换。我知道我需要一个switch语句,但我不确定如何或在哪里实现它 另一个问题是标签会更新,但只有在按下“转换”按钮时才会更新,所以请帮助我解决这个问题 这是我的ViewController.h文件 #import <UIKit/UI

我已经建立了基本的,它包括一个选择器。因此,无论用户从选择器中选择什么转换单位,标签都应该更新,以显示转换单位的名称,一旦用户在文本框中输入数字并点击按钮,答案应该显示在第二个文本框中。现在代码执行了,但问题是无论我在选择器中选择什么,它总是进行权重转换。我知道我需要一个switch语句,但我不确定如何或在哪里实现它

另一个问题是标签会更新,但只有在按下“转换”按钮时才会更新,所以请帮助我解决这个问题

这是我的ViewController.h文件

    #import <UIKit/UIKit.h>

@interface ViewController : UIViewController
<UIPickerViewDelegate, UIPickerViewDataSource> {

    IBOutlet UITextField *field1;
    IBOutlet UITextField *field2;
    IBOutlet UIPickerView *picker;
    IBOutlet UILabel *label1;
    IBOutlet UILabel *label2;
}
@property (weak, nonatomic) IBOutlet UILabel *textLabelData1;
@property (weak, nonatomic) IBOutlet UILabel *textLabelData2;

@property (nonatomic, retain) UIPickerView *picker;

-(IBAction) currencyConvert:(id)sender;
-(IBAction) weightConvert:(id)sender;
-(IBAction) distanceConvert:(id)sender;

@end

这不是理想的用户界面,效率低下,但这是你的应用程序。我只是想指出,你可能想花时间在它的设计和结构上

至于你的问题的解决办法,我不能为你解决所有问题,但我会指出一些让你更容易解决的事情


标签不更新的原因是,在单击“转换”按钮之前,您不会更新任何内容。下面的函数用于获取选择器新行的事件

 -(void)pickerView:(UIPickerView *)pickerView didSelectRow:
    (NSInteger)row inComponent:(NSInteger)component
    {
        NSLog(@"didSelectRow %li, inComponent: %li", row, component);
    }
请尝试以下方法:

 -(void)pickerView:(UIPickerView *)pickerView didSelectRow:
    (NSInteger)row inComponent:(NSInteger)component
    {
        NSLog(@"didSelectRow %li, inComponent: %li", row, component);
        switch (row) {
             case 0:
                 self.textLabelData1.text = @"Dollar";
                 self.textLabelData2.text = @"Rupees";
                 break;
             case 1:
                 // and so on 
        } 
    }

您的下一个问题是,您没有告诉“转换”函数当前选择了哪一行,并且您的条件
if
什么也不做

在obj-c中,直接用于变量的条件语句基本上只是检查初始化
if(x)
仅表示x已初始化为变量=true,if not=false。在这种情况下,这可能不是你想要的逻辑

下一步,似乎您正在尝试将3个不同的功能链接到同一个按钮?这就是您的上述
问题所在,如果相关问题导致出现问题,则所有三个功能将同时启动。。。但只有一个人有最后的发言权。大概是你上次联系的那个,虽然我不能肯定。我建议使用一个单独的功能来处理按钮按下,然后将其传递到正确的方法

最后,您永远不会告诉函数关于选择器状态的任何信息。您需要将其设置为IBOutlet,以便您的变量可以访问它。然后,您可以使用选择器的selected row函数来确定要使用的转换


我强调的内容将解决您的问题,但我强烈建议您查看一些教程,以便您了解更多有关为什么事情会这样做的信息。我建议:


希望有帮助

所以,你的问题是“请为我调试我的小程序”?这里的具体问题是什么,您尝试了什么,非常感谢!我会试试看。我是Objective-C新手,所以遇到了一些语法问题。谢谢你的帮助!不用担心,我们都去过:)
 -(void)pickerView:(UIPickerView *)pickerView didSelectRow:
    (NSInteger)row inComponent:(NSInteger)component
    {
        NSLog(@"didSelectRow %li, inComponent: %li", row, component);
        switch (row) {
             case 0:
                 self.textLabelData1.text = @"Dollar";
                 self.textLabelData2.text = @"Rupees";
                 break;
             case 1:
                 // and so on 
        } 
    }