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

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


person Narayanan    schedule 29.09.2011    source источник


Ответы (4)


Я не знаю, нужен ли вам еще ответ на этот вопрос, но это был такой одинокий пост, и, если я прав, он больше не подпадает под 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 являются синтезированными средствами доступа целевого контроллера представления. Надеюсь это поможет!

person DarqueSandu    schedule 07.10.2011
comment
он подпадает под NDA, но через 3 дня его не будет, официальный релиз состоится 14 октября, но мне нравится твой ответ +1 - person Shereef Marzouk; 11.10.2011
comment
Я попробовал то, что вы говорите, но свойства моего destinationViewController не обновляются. Любой совет? - person Francesco; 15.10.2011
comment
Я так понимаю, вы используете синтезированный аксессор (не частный ivar) целевого контроллера представления, и что контроллер представления уже создан во время установки приложения (т. е. раскадровка с размещенными в нем фактическими контроллерами представления, переход между ними, созданный при запуске приложения). ). В таком случае он должен работать. Тогда это может быть что-то вроде того, что система не знает о вашем конкретном месте назначения. просмотреть класс контроллера. Класс ViewController в моем примере является подклассом UIViewController, и перед @implementation я делаю что-то вроде «#import ViewController.h». Может ли это быть что-то из этого? - person DarqueSandu; 16.10.2011

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

person Scott Sherwood    schedule 21.10.2011
comment
Я прочитал блог, прежде чем попасть в этот пост ... спасибо за блог. - person thesummersign; 26.04.2012

Я снял видео на эту тему. Я надеюсь, что это помогает. http://full.sc/17yKkZF

person Joshua Moore    schedule 31.10.2013

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

- (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...
}

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

person Nils Ziehn    schedule 17.01.2014