将NSString从一个视图传递到另一个视图

时间:2011-01-03 21:57:49

标签: iphone variables uinavigationcontroller nsstring

我有2个视图共享相同的类文件(.h和.m)。在第一个视图中,我有一个UIPicker,其中包含一个项目列表和一个按钮。如果用户单击该按钮,我希望我的第二个视图提供相应的图片(基于在UIPicker中选择的项目)。

我的想法是根据所选项目在第一个视图中设置NSString。然后,当用户单击按钮将第二个视图推送到屏幕上时,我可以使用新视图传递该字符串。我一直在“谷歌搜索”一段时间,但我似乎无法用手指环绕它。如果重要,我正在使用导航控制器。以下是单击按钮时执行的代码:

-(IBAction) viewPictures{
     ViewControllerClass *sView = [[ViewControllerClass alloc] initWithNibName:@"ViewController2XIB" bundle:nil];
     [self.navigationController pushViewController:sView animated:YES];
}

2 个答案:

答案 0 :(得分:5)

你可以在ViewControllerClass中添加一个NSString *属性并在初始化之后设置它(这将是最简单的),或者你可以创建自己的init方法,它接受一个字符串并将其设置在那里。

选项1:

(将其放在.h文件中)

@interface ViewControllerClass : UIViewController {
  NSString *someString;
}

@property (nonatomic, copy) NSString *someString;

@end

(然后在您的.m文件中)

@implementation ViewControllerClass
@synthesize someString;
@end

将您的代码从上面改为:

-(IBAction) viewPictures{
     ViewControllerClass *sView = [[ViewControllerClass alloc] initWithNibName:@"ViewController2XIB" bundle:nil];
     sView.someString = @"Whatever String you want";
     [self.navigationController pushViewController:sView animated:YES];
}

选项2:

(将其放在.h文件中)

@interface ViewControllerClass : UIViewController {
  NSString *someString;
}

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle someString:(NSString *)SomeString;

@end

(然后在您的.m文件中)

@implementation ViewControllerClass

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle someString:(NSString *)SomeString
{
  if(self = [super initWithNibName:nibName bundle:nibBundle]) {
    someString = [SomeString copy];
  }
  return self;
}

@end

将您的代码从上面改为:

-(IBAction) viewPictures{
     ViewControllerClass *sView = [[ViewControllerClass alloc] initWithNibName:@"ViewController2XIB" bundle:nil someString:@"Whatever String you want"];
     [self.navigationController pushViewController:sView animated:YES];
}

答案 1 :(得分:1)

在.m中放置一个NSString,分享这两个视图,就像克里斯说的那样。 在响应按钮的方法中,单击将uipicker中的字符串传递给您创建的NSString,然后将其传递给视图2.