在第一个视图中使用第二个视图的文本字段

时间:2011-05-18 10:31:31

标签: iphone

我正在为iphone制作一个客户端服务器程序,我想使用我的serverIP,这是我在第一个视图服务器中的第二个视图的一部分.IP是一个uitextfield。我用来在第二个视图中输入ServerIP的值,但我想使用serverIP IN Firstview的值。

“”secondview.h“”接口文件

#import <UIKit/UIKit.h>


@interface secondview : UIViewController {

    IBOutlet UIView *view;
    IBOutlet UITextField *serverIP;
    IBOutlet UITextField *noc;
    IBOutlet UIButton *save;
    IBOutlet UIButton *back;
    IBOutlet UIButton *load;
     IBOutlet UILabel *display1;
}

-(IBAction) back;
-(IBAction) save;
-(IBAction) load;

@property (nonatomic,retain) IBOutlet UITextField *serverIP; 
@property (nonatomic,retain) IBOutlet UITextField *noc;
@property (nonatomic , retain) IBOutlet UILabel *display1;


@end

“”secondview.m“”实施文件

#import "secondview.h"


@implementation secondview


@synthesize serverIP,noc,display1;


-(IBAction) save{

    [[NSUserDefaults standardUserDefaults] setInteger:serverIP forKey:@"save"]; 

    NSUserDefaults *myname = [NSUserDefaults standardUserDefaults];



    [serverIP resignFirstResponder];



}

-(IBAction) load {

    serverIP = [[NSUserDefaults standardUserDefaults] integerForKey:@"load"];

    NSUserDefaults *myname = [NSUserDefaults standardUserDefaults];





}


-(IBAction) back {

    [self.parentViewController dismissModalViewControllerAnimated: YES];
}



- (void)dealloc {
    [super dealloc];
}


@end

4 个答案:

答案 0 :(得分:1)

因为你已经完成了这个

[[NSUserDefaults standardUserDefaults] setInteger:serverIP forKey:@"save"];

我会帮助你。首先,serverIPUITextField的一个实例。如果您执行上述操作,则不会存储其中包含的文本值。这样做 -

[[NSUserDefaults standardUserDefaults] setString:serverIP.text forKey:@"serverIP"];
[[NSUserDefaults standardUserDefaults] synchronize];

现在您可以在第一个视图中访问它。你必须这样做 -

NSString *serverIP = [[NSUserDefaults standardUserDefaults] stringForKey:@"serverIP"];

替代方法

但是,使用用户默认值可能不是正确的方法。如上所述,您可以使用应用程序委托来存储可能使其膨胀的所有此类值。

最好定义一个可以从第一个传递给第二个视图控制器的模型对象(可变)。然后,您可以在第二个视图控制器中修改模型对象,第一个视图控制器应该能够看到它。

我建议您将第二个视图控制器上的保留属性声明为NSMutableString *ipAddress,您可以将其修改为[ipAddress setString:serverIP.text];。您必须在第一个视图控制器中声明一个iVar并在将其传递给第二个视图控制器之前对其进行初始化。如果您需要其他帮助,请与我们联系。

答案 1 :(得分:0)

我接近这个的方法是为我的应用程序代表中的IP Addrees创建一个NSString实例变量,比如说

NSString *ipAddress;

然后,您可以从两个视图中设置指向App Delegate的指针:

MyAppsAppDelegate *appDelegate;

从appDelegate.ipAddress设置UITextField并从第二个视图更改。 您可能只需要通过覆盖viewWillAppear方法刷新第一个视图中的UITextField

希望有所帮助

杰里米

答案 2 :(得分:0)

在文本字段编辑的第一个视图中使用代理

答案 3 :(得分:0)

在apdelegate中创建一个字符串并在其中设置属性,然后将 textfield 值分配给appdelegate字符串。
比如 firstview

SpeakersAppDelegate *mainDelegate = (SpeakersAppDelegate *)[[UIApplication sharedApplication] delegate];  
mainDelegate.addDelegateGlobalstring=firstviewtextFieldString;