Быстрое решение (когда речь идет всегда одни и те же два класса) могут быть:
В файле .h первого контроллера представления, определить метод (или просто свойство):
-(void)selectedWYPT:(NSMutableDictionary*)wypt;
В файле .h вашего второго контроллера представления сделать свойство
@property FirstUIViewController *firstView;
В первом контроллере представления, то откроется второй контроллер представления через Segue, так что вы можете у себе:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"segueIdentifier"]) {
SecondUIViewController *destination = segue.destinationViewController;
destination.firstView = self;
}
}
Когда строка выбрана во втором окне вы можете использовать
if (self.firstView)
[self.firstView setWYPT:[allWYPTs objectAtIndex:indexPath.row]];
передать данные обратно на первый взгляд.
Как было сказано, это было бы быстрым решением, когда бывают задействованы те же самые два класса.
Другой способ - использовать протоколы. Когда первый контроллер представления не всегда будет FirstUIVierController, вы можете использовать что-то вроде этого:
SecondUIViewController.h
@class SecondUIViewController;
@protocol SecondUIViewControllerDelegate <NSObject>
-(void)secondUIViewController:(SecondUIViewController*)controller didSelectWYPT:(NSMutableDictionary*)wypt;
@end
@interface SecondUIViewController : UIViewController
@property id<SecondUIViewControllerDelegate> delegate;
@end
SecondUIViewController.m
где выбрана строка:
if (self.delegate && [self.delegate respondsToSelector:@selector(secondUIViewController:didSelectWYPT:)])
[self.delegate secondUIViewController:self didSelectWYPT:[allWYPTs objectAtIndex:indexPath.row]];
AnyOtherUIViewController.ч
#import "SecondUIViewController.h"
@interface AnyOtherUIViewController : UIViewController <SecondUIViewControllerDelegate>
...
...
AnyOtherViewController.m
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"segueIdentifier"]) {
SecondUIViewController *destination = segue.destinationViewController;
destination.delegate = self;
}
}
-(void)secondUIViewController:(SecondUIViewController*)controller didSelectWYPT:(NSMutableDictionary*)wypt {
//do something with the data
}
Очень хорошо объяснено и реализовано решение. :) –
спасибо за объяснение ... но свойство возвращает ошибку: Неизвестное имя типа ... в файле .h есть #import "nameOftheClass.h" реализовано ... – yorh
Другая проблема заключается в том, что popover не исчезает, когда Я нажимаю на строку ... – yorh