2013-08-13 5 views
2

У меня есть UITextField в secondViewController и кнопка в том же представлении.Как передать значение строки предыдущему viewController

Я хочу получить этот текст UITextField в виде строки для firstViewController.

Здесь мой код.

SecondViewController.m

-(void)backToFirstView 
{ 

NSString *str=disTxtFld.text; 
FirstView *firstView=[[FirstView alloc]init]; 
firstView.discountStr=str; 
[self.navigationController popViewControllerAnimated:YES]; 

} 

FirstViewController.h

@property (nonatomic,strong) NSString *disStr; 

FirstViewController.m

@synthesize disStr; 

-(void)viewWillAppear:(BOOL)animated 
{ 
NSLog(@"discount:%@",disStr); 
} 

Когда i`am пытается напечатать эту строку в первой view..it показа null значение ..

любые предложения ...

+0

Вы используете раскадровки? –

+1

Проверьте здесь часть передачи данных Назад - http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers –

+0

http://stackoverflow.com/questions/10719017/how-to -send-an-nsstring-to-another-view-controller/10719565 # 10719565 –

ответ

3

Самый простой способ сделать это - использовать делегаты. Пожалуйста, смотрите здесь: http://krodev.wordpress.com/2012/10/08/objective-c-delegates/ Это шаг за шагом, как определить и реализовать делегат.

Делегаты используют только то, что вы ищете.

+1

Делегат - это, безусловно, лучший подход. Эта ссылка также хорошо объясняет проблему передачи данныхhttp: //stackoverflow.com/questions/5210535/passing-data-between-view-controllers –

+0

Проголосовало только b/c, лучший способ - не использовать делегатов, которые пишут тонна дополнительного кода. Лучший способ - это разобрать, как я сказал в своем ответе. – bpapa

-2

один лучший подход объявляет ваш nsstring глобальным в приложении delegate.h синтезирует его заполнить его данными во втором контроллере представления, а затем попытаться справиться с этой nsstring в контроллере первого представления.

0

Лучший способ: использовать разматывание в своем раскадровке, чтобы вернуться к предыдущему VC и передать данные. Для получения дополнительной информации об этом, смотрите расписание WWDC-сессии с 2012 года.

Другой способ: использовать шаблон делегата. Создайте протокол в своем классе SecondViewController под названием SecondViewControllerDelegate. Дайте ему методы типа «secondViewControllerDidFinish:» и «secondViewControllerDidCancel:». Пусть FirstViewController соответствует этому протоколу и обеспечивает реализацию этих методов. В этих реализациях убедитесь, что представленный SecondViewController отклонен. В SecondViewController создайте свойство delegate идентификатора типа.

Когда FirstViewController представляет SecondViewController, настройте его как делегат SecondViewController. Когда SecondViewController завершает любую работу, которая должна быть выполнена, попросите их вызвать методы делегата и передать соответствующие данные.

+2

Maulik - в чем смысл этого редактирования? – bpapa

+0

Это было не просто бессмысленно, это было плохое редактирование. Используйте только цитату блока, когда вы на самом деле * цитируете *. И тогда вам нужно предоставить атрибуцию фактическому источнику. Как лучше Google и я могу сказать, этот ответ не копируется нигде, поэтому его не следует указывать. –

0

сделать функцию в первом-ViewController

-(void)setStringFromSecondView:(NSStirng *)_value{ 
my_String=[NSString stringwithFormate:@"%@",_value]; 
} 

и добавить в файл заголовка

-(void)setStringFromSecondView:(NSStirng *)_value; 

Теперь добавьте переменную делегата в secondViewController

{ 
id delegateOfPrevious; 
} 

-(void)setDelegate:(id)_delegate{ 
delegateOfPrevious=_delegate 
} 

Теперь перед Раздвигая Второй вид Контроллер в First viewController вы должны установить делегат FirstView Как этот

secondViewController *secondView=[[secondViewController alloc] init....]; 
secondView.setDelegate=self; 

........... Теперь каждая Вещь установлена.вы в одном шаге от успеваемости:

перед тем, как вызывать SecondViewController, вы можете вызвать эту функцию во втором контроллере просмотра и установить значение в контроллере первого вида.

[delegateOfPrevious setStringFromSecondView:textView.txt]; 

Не забудьте включить firstViewController.h в SecondViewController. Я сделал это за день до этого для своего собственного проекта, и он отлично работает.

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