2014-04-02 5 views
0

В ViewContrller1.h:Передача строки между UIViewControllers.

@property (retain,nonatomic) NSString *myString; 

В ViewController2.m, я хочу прочитать значение из текстового поля и присвоить его viewContrller1.theString и перейти к ViewContrller1

Я использовал этот метод, но я получить нулевое значение моей строки в ViewContrller1:

- (IBAction)buttonPressed:(id)sender { 

    ViewContrller1 *go=[self.storyboard instantiateViewControllerWithIdentifier:@"ViewContrller1"]; 
    go.myString=self.myTextFeild.text; 
    [self.navigationController pushViewController:go animated:YES]; 

} 

Удивительно, как это работает?

+0

Ваш код кажется правильным. Возможная проблема, которую я вижу, - self.myTextFeild.text. Возможно, IBOutlet для этого текстового поля не установлен правильно. –

+0

установить точку останова во второй строке метода и проверить значение myTextField и myTextField.text. Что ты видишь? – RobP

+0

@duricanRadu установлен в viewcontrller1.h как (сохраняющий, неатомный), должен ли он быть сильным вместо этого? спасибо – user2230828

ответ

0

Чтобы передать свойства между 2 видами, получающий просмотр должен иметь общедоступное свойство. Например, ваш VC 2 shoud имеет общедоступную NSString. Это означает, что указанный файл .h. Затем на вашем начальном VC вам нужно передать строку по методу prepareForSegue. Нечто подобное здесь:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 


    if ([segue.identifier isEqualToString:@"vc2segue"]) { 

     UIViewController *vc=segue.destinationViewController; 
     vc.publicNstring=self.someTextView.text; 

    } 

}

+0

не то же самое? – user2230828

+0

Извините, то же самое, что и что? Раскалывание и Segues - это стандартный способ перехода от одной сцены к другой, а также для передачи данных вперед и назад. Вызов viewControllers по коду уже не обычный. – Marcal

0

попытка простого импорта viewcontrller1.h в новом контроллере представления.

#import "viewcontrller1.h" 

Ответ Marcal также должен работать.

+0

я сделал! спасибо человеку – user2230828

0

В коде, который вы опубликовали, нет ничего плохого, если вы не сделали никаких опечаток и связали текстовое поле и кнопку с вашим вторым контроллером представления (тот, который отправил строку), и что вы добавил раскадровки идентификатор первого контроллера представления в раскадровку - смотрите здесь http://sketchytech.blogspot.co.uk/2012/11/instantiate-view-controller-using.html

Предполагая, что вы также встроенный контроллер представления в пределах навигационного контроллера, затем строку кода в viewcontrller1.m (viewDidLoad :):

NSLog(@"%@",self.myString); 

Следует подтвердить, что это работает. На самом деле, я просто протестировал его с вашим кодом, и он работает. Проверка на опечатки будет моим советом, если вы все это сделали.

+0

Да, я сделал все это и написал nsLog, и он напечатал Null THANK – user2230828

+0

Вы назначили два контроллера вида правильные пользовательские классы? Заполнил идентификатор StoryBoard ID для viewcontrollr1? Выделил «myTextFlied» то же самое в свойстве, что и метод? Контроллер навигации, как ваш начальный контроллер и viewcontroller2 подключен к нему?Импортировал класс viewcontrollr1 во второй контроллер представления, как это было предложено UserAwesome? – sketchyTech

Смежные вопросы