Я прочитал following tutorial относительно раскадровки.Xcode (раскадровки и segues): почему делегаты вместо ссылок?
В основном образец приложения, созданного в этом учебном пособии, позволяет пользователю перемещаться между различными видами и создается с помощью segue.
Для того, чтобы перемещаться между представлениями учебник сказать, чтобы создать два UITableViewController и когда «происходит» от одного к другому, чтобы указать делегата:
Первый контроллер:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"AddPlayer"])
{
UINavigationController *navigationController = segue.destinationViewController;
PlayerDetailsViewController *playerDetailsViewController = [[navigationController viewControllers] objectAtIndex:0];
playerDetailsViewController.delegate = self;
}
}
Второй контроллер:
@protocol PlayerDetailsViewControllerDelegate <NSObject>
- (void)playerDetailsViewControllerDidCancel: (PlayerDetailsViewController *)controller;
- (void)playerDetailsViewController: (PlayerDetailsViewController *)controller didAddPlayer:(Player *)player;
@end
@interface PlayerDetailsViewController : UITableViewController
@property (nonatomic, weak) id <PlayerDetailsViewControllerDelegate> delegate;
Когда "вернуться":
- (IBAction)cancel:(id)sender
{
[self.delegate playerDetailsViewControllerDidCancel:self];
}
Мой простой вопрос - почему это осложнение? Зачем использовать делегаты и протоколы?
Я изменил код, используя стиль «Java», и теперь я передаю второму контроллеру ссылку на первую, все работает.
Первый контроллер:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
...
playerDetailsViewController.playerViewController = self;
}
Второй контроллер:
@property (strong, readwrite) PlayerViewController *playerViewController;
Итак, каковы преимущества для использования делегатов, а не просто проходящие ссылки между ViewControllers?
Спасибо!
Guido
Спасибо за ответ! –