如何在基于选项卡的app中将字符串从一个视图传递到另一个视图

时间:2011-06-06 12:04:31

标签: iphone objective-c ipad uitabbarcontroller

我创建了一个基于标签的应用程序,它有4个标签和4个与这些标签相对应的视图。 我在第一个视图中有一个字符串,当我在第二个视图中打印此字符串时,它打印为null。

在第一个视图中。

NSString *dateString;
@property(nonatomic,retain) NSString *dateString;

在第一个视图中.m

@synthesize dateString;
dateString=button6.titleLabel.text;
NSLog(@"dateString:%@",dateString);

在第二个视图中。

NSString *dateString;
@property(nonatomic,retain) NSString *dateString;

在第二个视图中.m

@synthesize dateString;

- (void)viewDidLoad { [super viewDidLoad];
    NSLog(@"dateString:%@",self.dateString);
}

5 个答案:

答案 0 :(得分:2)

将视图控制器添加为应用程序委托的属性(如果应用程序是一个相对简单的设计)。

然后,您可以通过app委托从第一个视图控制器引用第二个视图控制器的属性。 (一个这样的属性可能是您希望第二个VC复制或保留的字符串。)

答案 1 :(得分:1)

在应用委托类中创建 NSString 变量并设置属性并使合成该变量。

并在 applicationDidFinishLaunching 方法中设置 @“”(空白)值。

例如 - 我的变量名是str,然后在applicationDidFinishLaunching中初始化str,如self.str = [NSString stringWithFormat:@""];

现在您可以在任何标签 * 视图 *中使用它,并根据您的要求设置值。

更多代码

<强> AppDelegate.h

@interface AppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    NSString *baseURL;
}

@property (nonatomic, retain) NSString *baseURL;

@end

<强> AppDelegate.m

#import "AppDelegate.h"

@implementation AppDelegate

@synthesize window;
@synthesize baseURL;

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    self.baseURL = [NSString stringWithFormat:@""];
}

- (void)dealloc 
{
    [baseURL release];

    [window release];

    [super dealloc];
}

@end

<强> ViewController1.h

@class AppDelegate;

@interface ViewController1 : UIViewController <UITextFieldDelegate>
{
    AppDelegate *appDelegate;
}

@end

<强> ViewController1.m

#import "AppDelegate.h"
#import "ViewController1.h"

@implementation ViewController1

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];

    appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
        NSLog(@"value - %@",appDelegate.baseURL); // Here you can set or get the value.
}

答案 2 :(得分:0)

它可能不是最好的答案。但是在appdelgate中创建一个字符串变量并从第一个视图将变量传递给它并从第二个视图中获取它对我有用

答案 3 :(得分:0)

真的,我们是否失去了MVC的重点以及iPhone开发中最容易实现的最强大的功能?

代表怎么样?

@protocol ViewOneDelegate
- (void)getStringVariable;
@end

@interface ViewOneModel : NSObject
{
    NSString* _stringVariable;
    id<ViewOneDelegate> _theDelegate;
}

@property (nonatomic, retain) id<ViewOneDelegate> theDelegate;

@end

将控制器指定为ViewOneModel的委托。

答案 4 :(得分:0)

这是一个简单的解决方案,但不是最好的解决方案,创建一个全局变量,并使用它。

标题

  extern NSString *GlobalString;
    @interface GlobalVariables : NSObject {
    }

@end

实施

#import "GlobalVariables.h"

@implementation GlobalVariables
 NSString *GlobalString;
@end

现在要访问变量,只需导入要使用的文件中的标题即可。 您可能希望在使用它之前检查它是否已启动。