Переходная реализация iOS 5

#storyboard #ios5

#раскадровка #ios5

Вопрос:

При реализации перехода между двумя контроллерами представления как изменить свойство целевого контроллера представления с помощью объекта segue? В документации говорится, что это можно сделать внутри метода prepareForSegue: sender: . я пробовал, но не увенчался успехом

Ответ №1:

Я не знаю, нужен ли вам еще ответ на это, но это был такой одинокий пост, и, если я прав, это больше не подпадает под NDA. Если я ошибаюсь, пожалуйста, умерьте мой ответ до небытия, итак, поехали: я только что закончил делать то, что использует то, что вам нужно. Это код, который работает для меня:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"relevantSegueIdentifier"])
    {
        // [segue destinationViewController] is read-only, so in order to
        // write to that view controller you'll have to locally instantiate
        // it here:
        ViewController *upcomingViewController = [segue destinationViewController];
        
        // You now have a solid reference to the upcoming / destination view
        // controller. Example use: Allocate and initialize some property of
        // the destination view controller before you reach it and inject a
        // reference to the current view controller into the upcoming one:
        upcomingViewController.someProperty = [[SomePropertyClass alloc] initWithString:@"Whatever!"];
        upcomingViewController.initialViewController = [segue sourceViewController];
        // Or, equivalent, but more straightforward:
        //upcomingViewController.initialViewController = self;
    }
}
  

Это предполагает, что как SomeProperty, так и initialViewController являются синтезированными средствами доступа к целевому контроллеру представления. Надеюсь, это поможет!

Комментарии:

1. это подпадает под NDA, но через 3 дня этого не произойдет, официальный релиз состоится 14 октября, но мне нравится ваш ответ 1

2. Я пробовал то, что вы говорите, но свойства на моем destinationViewController не обновляются. Есть какие-нибудь советы?

3. Я полагаю, вы используете синтезированный инструмент доступа (а не частный ivar) целевого контроллера представления и что экземпляр контроллера представления уже создан во время настройки приложения (т. Е. раскадровка с размещенными в ней фактическими контроллерами представления, переход между ними, созданный при запуске приложения). В этом случае это должно сработать. Тогда это может быть что-то вроде того, что система не знает о вашем конкретном dest. просмотр класса контроллера. Класс ViewController в моем примере является подклассом UIViewController, и перед @implementation я делаю что-то вроде ‘#import «ViewController.h»‘. Может ли это быть одной из этих вещей?

Ответ №2:

Я написал учебное пособие, в котором приведены примеры кода для передачи информации в новую сцену и информации обратно из сцены с использованием делегирования, поэтому проверьте это, это должно решить вашу проблему. Раскадровка iOS 5: как использовать UITableViews переходов, сцен и статического содержимого

Комментарии:

1. Я прочитал блог, прежде чем перейти к этому сообщению .. спасибо за блог.

Ответ №3:

Что я использую в контроллере представления исходного кода, так это:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    UIViewController *upcomingViewController = [segue destinationViewController];
    upcomingViewController.view.tag = [[segue identifier] hash];
}
  

А затем в целевом контроллере представления, который я использую (например, в viewDidAppear).

 if(self.view.tag == [@"MySeqgueIdentifier" hash])
{
   // Do something here...
}
  

Это круто, поскольку вам не нужно создавать какие-либо свойства и т. Д., И все работает прямо из конструктора интерфейсов.