Заменяет ли развертывание раскадровки (выход) переход от необходимости в дочернем делегате в родительской сцене?

Заменяет ли раскрутка перехода раскадровки в ios6 необходимость реализации в исходной сцене делегата для передачи данных из дочерней сцены в родительскую сцену в ios5?

Как я обычно это делаю:

Заголовок родительского контроллера: Вызов делегата дочерней сцены

@interface ParentViewController : UIViewController <ChildViewControllerDelegate>
//ok not much to show here, mainly the delegate
//properties, methods etc
@end

Основной родительский контроллер (тело): Подготовка перехода, установка делегата, создание метода возврата из дочерней сцены

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

   if ([[segue identifier] isEqualToString:@"toChildScene"])
   {
       UINavigationController *childViewController = segue.destinationViewController;
       childViewController.delegate = self;
   }
}

#pragma mark - Delegate Segue Methods

-(void) childViewControllerDidSave: (ChildViewController *) controller Notes:(NSString *)sNotes
{
   someTextLabel.Text = sNotes
   [self dismissModalViewControllerAnimated:YES];    
}

Заголовок дочернего контроллера: создание делегата, ссылка на методы родительской сцены

@class ChildViewController;

@protocol ChildViewControllerDelegate <NSObject>
-(void) childViewControllerDidSave: (ChildViewController *) controller Notes:(NSString *)sNotes
@end

@interface ChildViewController : UIViewController 
@property (weak, nonatomic) id <ChildViewControllerDelegate> delegate;
//properties, methods, etc
@end

Главный дочерний контроллер (тело): вызов метода родительской сцены

- (IBAction)someAction:(id)sender
{
   [self.delegate childViewControllerDidSave:self sNotes:someTextField.text];
}

Итак, теперь вопрос на миллион долларов: стал ли этот процесс проще в iOS 6? Могу ли я сократить много работы, используя раскрутку перехода / выхода из перехода? Любой пример будет принят с благодарностью.


person BriOnH    schedule 13.11.2012    source источник


Ответы (1)


да.

Сегменты раскрутки — это абстрактная форма делегирования. В iOS 6 проще использовать раскручивание, а не делегаты для передачи данных в обратном направлении при закрытии контроллеров представления.

В родительском контроллере представления создайте метод очистки, который возвращает IBAction и принимает UIStoryboardSegue в качестве аргумента:

- (IBAction)dismissToParentViewController:(UIStoryboardSegue *)segue {
    ChildViewController *childVC = segue.sourceViewController;
    self.someTextLabel.Text = childVC.someTextField.text;
}

Затем в контроллере дочернего представления перетащите, удерживая нажатой клавишу Control, от кнопки закрытия к зеленому значку выхода, чтобы подключить переход к раскрутке:

введите здесь описание изображения

person Bryan Luby    schedule 11.03.2013