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

Bri*_*ian 1 iphone variables nsstring uinavigationcontroller

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

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

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

the*_*ent 5

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

选项1:

(将其放在.h文件中)

@interface ViewControllerClass : UIViewController {
  NSString *someString;
}

@property (nonatomic, copy) NSString *someString;

@end
Run Code Online (Sandbox Code Playgroud)

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

@implementation ViewControllerClass
@synthesize someString;
@end
Run Code Online (Sandbox Code Playgroud)

将您的代码从上面改为:

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

选项2:

(将其放在.h文件中)

@interface ViewControllerClass : UIViewController {
  NSString *someString;
}

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

@end
Run Code Online (Sandbox Code Playgroud)

(然后在你的.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
Run Code Online (Sandbox Code Playgroud)

将您的代码从上面改为:

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