-(void)viewDidLoad
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(needChangeLabel:) name:@"WBCAddWaterViewControllerChangeLabelNotification" object:nil];
}
- (void)needChangeLabel:(NSNotification *)n
{
NSLog(@"%@", n.userInfo);
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"WBCAddWaterViewControllerChangeLabelNotification" object:nil];
}
NSDictionary *userInfo = @{@"key1" : @"value1", @"key2" : @"value2"};
[[NSNotificationCenter defaultCenter] postNotificationName:@"WBCAddWaterViewControllerChangeLabelNotification" object:nil userInfo:userInfo];
@protocol AddControllerDelegate <NSObject>
// здесь передаете то, что было добавлено. если ничего не надо передавать, то без второго параметра
@required
- (void)addController:(AddController *)controller addedObject:(id)object;
@end
@interface AddController : UIViewController
@property (nonatomic, weak) id<AddControllerDelegate> delegate;
@end
// .h
@interface LabelController : UIViewController
@end
// .m
@interface LabelController() <AddControllerDelegate>
@property (nonatomic, weak) IBOutlet UILabel *label;
@end
@implementation LabelController
- (void)prepareForSegue:(UIStoryboardSegue *)segue
{
if ([segue.identifier isEqualToString:@"your-segue-identifier"]) {
AddController *addController = segue.destinationController;
addController.delegate = self;
}
}
#pragma mark - AddControllerDelegate
- (void)addController:(AddController *)controller addedObject:(id)object
{
// здесь достаете новый текст label из пришедших данных
NSString *labelText = [object labelText];
self.label.text = labelText;
}
@end
// WBCAddWaterViewController.h
@class WBCAddWaterViewController;
@protocol WBCAddWaterViewControllerDelegate <NSObject>
// здесь вместо WBCWater подставьте имя класса, который отображает вашу модель.
// ну или если я не угадал - второй параметр должен быть такого типа и так называться, чтобы показывать, что передается. Передаете просто строку - значит addedName:(NSString *)name. Никаких id, никакого кастования - максимум конкретики.
@required
- (void)addWaterController:(WBCAddWaterViewController *)controller addedWater:(WBCWater *)water;
@end
@interface WBCAddWaterViewController : UIViewController
@property (nonatomic, weak) id<WBCAddWaterViewControllerDelegate> delegate;
@end
// WBCAddWaterViewController.m
@implementation WBCAddWaterViewController
// обработка нажатия на кнопку "Добавить"
- (IBAction)addButtonTap:(id)sender
{
WBCWater *water = ...;
[self.delegate addWaterController:self addedWater:water];
// не делайте здесь popViewController!
}
@end
// .h
@interface WBCViewController : UIViewController
@end
// .m
@interface WBCViewController() <WBCAddWaterViewControllerDelegate>
@property (nonatomic, weak) IBOutlet UILabel *label;
@end
@implementation WBCViewController
- (void)prepareForSegue:(UIStoryboardSegue *)segue
{
// это segue, протянутая из WBCViewController в WBCAddWaterViewController
// ей надо задать идентификатор и записать сюда
if ([segue.identifier isEqualToString:@"your-segue-identifier"]) {
WBCAddWaterViewController *addController = segue.destinationController;
addController.delegate = self;
}
}
#pragma mark - WBCAddWaterViewControllerDelegate
- (void)addWaterController:(WBCAddWaterViewController *)controller addedWater:(WBCWater *)water
{
// я написал [water name] наугад, и вообще я сам WBCWater пытался угадать
// здесь уже пора самому разобраться что и откуда
NSString *labelText = [water name];
self.label.text = labelText;
// делегат должен бы сам управлять скрытием контроллера.
// здесь очень здорово бы использовать unwindind segues, но сложно объяснить
[self.navigationController popViewControllerAnimated:YES];
}
@end