我有2个视图共享相同的类文件(.h和.m)。在第一个视图中,我有一个UIPicker,其中包含一个项目列表和一个按钮。如果用户单击该按钮,我希望我的第二个视图提供相应的图片(基于在UIPicker中选择的项目)。
我的想法是根据所选项目在第一个视图中设置NSString。然后,当用户单击按钮将第二个视图推送到屏幕上时,我可以使用新视图传递该字符串。我一直在“谷歌搜索”一段时间,但我似乎无法用手指环绕它。如果重要,我正在使用导航控制器。以下是单击按钮时执行的代码:
-(IBAction) viewPictures{
ViewControllerClass *sView = [[ViewControllerClass alloc] initWithNibName:@"ViewController2XIB" bundle:nil];
[self.navigationController pushViewController:sView animated:YES];
}
答案 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.