#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...
}
Это круто, поскольку вам не нужно создавать какие-либо свойства и т. Д., И все работает прямо из конструктора интерфейсов.