【问题标题】:Any number that i put in the textfield it appears in the label as 0我在文本字段中输入的任何数字在标签中显示为 0
【发布时间】:2012-07-15 21:33:53
【问题描述】:

我一直在这里使用 Objective-c 做一件事,但我是这门语言的初学者,这就是我所做的:

有一个名为“firstviewclass”的类,它在我的第一个视图的控制中,在这个视图中有一个用户输入数字的文本字段。文本字段位于名为“setNumber”的 firstviewclass.h 中。还有另一个名为“secondviewclass”的类控制第二个视图,在这个视图中有一个标签位于 secondviewclass.h 中,我希望这个标签接收用户在文本字段中输入的值第一个视图,但是当我在 iOS 模拟器上对其进行测试时,我在文本字段中输入的任何数字都会在标签中显示为 0...我真的不知道该怎么办!

我的代码:

firstviewclass.h:

#import <UIKit/UIKit.h>

@interface firstviewclass : UIViewController

@property (strong, nonatomic) IBOutlet UITextField *setNumber;

- (IBAction)gotonextview:(id)sender;

@end

secondviewclass.h:

#import <UIKit/UIKit.h>
#import "firstviewclass.h"

@interface secondviewclass : UIViewController

@property (weak, nonatomic) IBOutlet UILabel *labelthatrecivesthetextfieldvalue;

@end

secondviewclass.m:

#import "secondviewclass.h"
#import "firstviewclass.h"

@implementation secondviewclass
@synthesize labelthatrecivesthetextfieldvalue;


-(void)viewDidLoad{
    [super viewDidLoad];

    firstviewclass *object = [[firstviewclass alloc] init];

    NSString *string = [[NSString alloc] initWithFormat:@"%i", [object.setNumber.text intValue]];

    labelthatrecivesthetextfieldvalue.text = string;

}

@end

【问题讨论】:

    标签: iphone objective-c ios uitextfield uilabel


    【解决方案1】:

    首先,我强烈建议不要将属性或实例变量命名为setSomething。这会让任何阅读您的代码的人感到头疼,因为它看起来总是像您在尝试调用 setter。另外,请务必将您的班级名称大写。

    您的实际问题是,在viewDidLoad 中,您正在创建firstviewclass 的实例,然后尝试从setNumber 中获取值。那是在用户有机会输入任何内容之前。

    此外,firstviewclass 中的 setNumber 插座可能无论如何都不会去,因为您自己实例化了该类,而不是加载 NIB。


    编辑(啊,故事板,d'oh):

    对于 Storyboard,您需要将 setNumber 文本字段的值传递给第二个视图。

    首先,删除firstviewclass *object = [[firstviewclass alloc] init]; 这一行。

    然后,在您的第一个视图控制器的prepareForSegue 方法中,您可以将setNumber 文本字段的值传递给您的第二个视图控制器中的一个属性,并从那里使用它(例如在configureView 中)。

    我推荐working through Apple's Storyboard tutorial,它会一步一步地准确显示您需要做什么。您现在遇到问题的步骤是将数据传递给您的下一个视图控制器,是here

    【讨论】:

    • 我不知道什么是 NIB,当我开始使用 Xcode 时,情节提要已经在那里了......抱歉我缺乏这方面的知识。
    • 请参阅上面的编辑。如果您阅读 Apple 的 Storyboard 教程,事情应该会变得更加清晰。
    【解决方案2】:

    您是如何开始设置标签的?来自viewDidLoad?如果是这样,那么 0 将是正确的,因为您没有将 object.setNumber.text 设置为任何内容。此外,您不会从第一个 viewController 中携带数据。您需要让第二个 viewController 知道数字是多少。尝试在您的 NSUserDefaults 中设置此值,然后在您的第二个 viewController 中,从您的默认值中加载该值。

    【讨论】:

    • 我是 Objective-c 和这个 iphone sdk 的新手,我不知道你在说什么,对不起......
    【解决方案3】:

    在 secondviewclass 的 viewDidLoad 中,您正在创建 firstviewclass 的新实例,然后访问标签的属性。由于您尚未将其设置为任何值,因此它将始终返回零。

    能贴出 gotonextview 方法的实现吗?

    编辑:

    我认为您需要从第一个视图控制器设置标签属性。所以在你的 gotonextview 方法中,添加这一行:

    secondviewclass.labelthatrecivesthetextfieldvalue.text = self.setNumber.text;
    

    我承认我对你的命名方案有点迷茫,但这可能会奏效。

    【讨论】:

    • 我正在使用情节提要,所以在实现中什么都没有,它只是将用户从一个视图带到另一个有模态的视图......我希望你理解,我不知道如何解释.
    • 当我这样做时出现错误:“'secondviewclass' 类型的对象上的属性'labelthatrecivesthetextfieldvalue'”我做错了什么?
    猜你喜欢
    • 2014-05-05
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    相关资源
    最近更新 更多