多视图应用。无法更改文本字段值

时间:2011-08-15 20:03:28

标签: iphone objective-c

嘿伙计们我正在制作一个有2个视图的应用程序。第一个视图是用户输入数字的位置,当他们点击计算按钮时...它将它们带到一个新视图,其中答案显示在文本字段上。计算由另一个文件处理。 “calc.h”和“calc.m”

这是主视图文件(用户输入数字的视图)

#import <UIKit/UIKit.h>

@interface test2ViewController : UIViewController {


    IBOutlet UITextField *num1; //input number 1
    IBOutlet UITextField *num2; // input number2
}
@property (nonatomic,retain) UITextField *num1;
@property(nonatomic, retain)UITextField *num2;

-(IBAction)calculate:(id)sender; //the calculate button
-(IBAction)exit:(id)sender;
@end

答案显示在用户点击计算按钮时显示的不同视图中。下面是代码!

#import "test2ViewController.h"
#import "answer.h"
#import "calculate.h"
@implementation test2ViewController

@synthesize num1,num2;

-(IBAction)calculate:(id)sender{
    calculate *testclass = [[calculate alloc]init];
    answer *view = [[answer alloc]initWithNibName:nil bundle:nil];
    [self presentModalViewController:view animated:YES];
    int i = [[num1 text] intValue];
    testclass.number1 = i;

    int j = [[num2 text] intValue];
    testclass.number2 = j;
    [testclass calc];



}

“。h”显示答案的视图文件

#import <UIKit/UIKit.h>


@interface answer : UIViewController {

    IBOutlet UITextField *text;//textfield to display answer 

}
@property(nonatomic,retain) UITextField *text;
-(IBAction)back:(id)sender;

@end

“。m”文件

#import "answer.h"
#import "test2ViewController.h"
#import "calculate.h"

@implementation answer

@synthesize text;

-(IBAction)back:(id)sender{

    test2ViewController *view = [[test2ViewController alloc]initWithNibName:nil bundle:nil];
    [self presentModalViewController:view animated:YES];

}

下一个是进行计算的目标c类文件。它有一个执行计算的函数,这里是“.h”和“.m”文件 “.H”

#import <Foundation/Foundation.h>


@interface calculate : NSObject {

    int number1;
    int number2;
    NSString *ans;
}
@property int number1;
@property int number2;
@property (nonatomic , retain) NSString *ans;
-(void)calc;
@end

“米”

#import "calculate.h"
#import "answer.h"
#import "test2ViewController.h"
@implementation calculate

@synthesize number1,number2,ans;

-(void)calc{

int i = number1 + number2;
    answer *ans1 = [[answer alloc]init];

    ans = [NSString stringWithFormat:@"%d",i]; 
    ans1.text.text = ans;


}


@end

因此您可以看到上面的函数计算答案..将其输入字符串并将其设置为文本字段。但是文本字段没有显示任何内容。所以这里的问题是我无法访问文本字段,即使我从中创建了一个对象....

2 个答案:

答案 0 :(得分:0)

问题是您的“ans”UIViewController尚未加载。

执行此操作的最常用方法是向UIViewController“ans”a @property提供结果。然后在“ans”viewDidLoad方法中,将文本字段设置为适当的值。

答案 1 :(得分:0)

我对你想要完成的事情感到有点困惑,你想在另一个类中使用NSString或文本UITextField吗?如果是这种情况,请给出要显示@property的任何内容的字符串,然后设置您想要的字符串值,然后导入calc.h#import "calc.h")第二个类,然后在界面中创建此calc *getString;为其创建@property@synthesize它。然后从calc获取字符串的值,执行类似getString.SomeStringName的操作,现在您可以使用它做任何您想做的事情。

我认为这就是你想要的?如果没有随意发表评论。美好的一天:)

编辑:我打算给你一个例子,因为我的写作方式有点让人困惑lol

所以这是你的calc.h文件,也记得即时在线输入,而不是在xcode中,所以如果我拼写错误或犯了一个简单的错误,那就是原因:

@interface calc : UIViewController { 

NSString *answer;

}
@property (nonatomic, retain) NSString *answer;

@end

你的.h可以有更多

现在让我们跳进你的.m

@implementation calc
@synthesize answer;

//do all the work to get the answer, once you have it do this
[answer retain];


//load your new view controller

让我们跳转到您要加载的其他视图控制器

这是它的.h文件

#import "calc.h"

@interface secondController : UIViewController {

calc *getAnswer;


}
@property (nonatomic, retain) calc *getAnswer;

@end

然后转到你的.m

@implementation secondController

@synthesize getAnswer;

-(void)viewDidLoad{

WhateverYouWantTheStringToBeSetTo.text = getAnswer.Answer;

}

然后应该从另一个控制器中获取字符串并允许你在这个中使用它..

希望这有帮助:)