Ответ от @chown определенно будет работать, если ViewController, которому вы отправляете строку, является базовым контроллером tabBarController.
Если вы были на нескольких уровнях вглубь стека NavigationController, то вам понадобится другой подход.
Подход, который я бы порекомендовал, состоял бы в создании protocol
. Здесь вы создаете delegate
view2, чтобы передать строку обратно в стек до того, как представление будет закрыто.
Существует множество примеров этого кода, как в документации Apple, так и в Интернете (включая StackOverflow), но вот быстрое завершение работы ...
В View2.h
#import <UIKit/UIKit.h>
//define the protocol, so you can set the delegate to this type
@protocol View2Delegate;
@interface View2 : UIViewController
//other properties etc
@property (assign) id <View2Delegate> delegate;
@end
//put the actual protocol definition here so we can pass a reference to ourself back up too if needed...
@protocol View2Delegate
- (void)view2:(View2*)view passingStringBack:(NSString *)stringToPassBack;
@end
В View2.m вы можете вызывать этот метод делегата где угодно, но вот пример:
- (void)viewWillDisappear:(BOOL)animated
{
if(self.delegate)
[self.delegate view2:self passingStringBack:@"String I'm passing back"];
[super viewWillDisappear:animated];
}
Тогда в View1.h
@interface View2 : UIViewController <View2Delegate>
и View1.m
- (void)view2:(View2*)view passingStringBack:(NSString *)stringToPassBack
{
NSLog(@"%@", stringToPassBack);
}
Другим вариантом было бы опубликовать уведомление, но это скорее сценарий широковещания, чем целевое сообщение, поэтому я не буду публиковать пример кода для этого.