Передача NSString из одного представления в другое представление - PullRequest
1 голос
/ 04 января 2011

У меня есть 2 представления, которые используют одни и те же файлы классов (.h и .m). На первый взгляд, у меня есть UIPicker со списком элементов и кнопкой. Если пользователь нажимает кнопку, я хочу, чтобы во втором представлении появилось соответствующее изображение (на основе элемента, выбранного в UIPicker).

Я думал установить строку NSString в первом представлении на основе выбранного элемента. Затем, когда пользователь нажимает кнопку, чтобы выдвинуть второй вид на экран, я могу передать эту строку с новым видом. Я "гуглил" некоторое время, но, похоже, не могу обернуть это пальцем. Если это имеет значение, я использую контроллер навигации. Вот код, который выполняется при нажатии кнопки:

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

Ответы [ 2 ]

5 голосов
/ 04 января 2011

Вы можете либо добавить свойство NSString * в ViewControllerClass и установить его после его инициализации (это будет проще всего), либо вы можете создать свой собственный метод 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 голос
/ 04 января 2011

Поместите строку NSString в .m, которая разделяет эти 2 представления, как сказал Крис. В методе, который реагирует на нажатие кнопки, передайте строку из uipicker в созданную вами строку NSS, а затем передайте ее представлению 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...