Как обрабатывать два сегмента, идущих к одному контроллеру вида? - PullRequest
7 голосов
/ 08 марта 2012

У меня есть приложение для iPhone, которое я сейчас создаю в XCode 4.3 с раскадровкой. У меня есть «корневой» контроллер представления с двумя (2) запросами к контроллеру представления, содержащему UIWebView. Я хочу иметь возможность идентифицировать segue (уже установили уникальные идентификаторы для обоих segues), чтобы я мог «выдвинуть» правильное содержимое в UIWebView, основываясь на том, что segue был активирован в «корневом» контроллере представления.

Я думаю, что должен использовать метод prepareForSegue, но не знаю, куда он пойдет. Где я могу узнать, как работать с двумя сегментами, идущими к одному и тому же контроллеру представления? (Я запустил Google и не нашел ничего подходящего для моей ситуации).

Вот код, который я использую:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"helpSegue"]) {
        NSLog(@"helpSegue");
    }
    else if ([segue.identifier isEqualToString:@"reportSegue"]) {
        NSLog(@"reportSegue");
    }
}

1 Ответ

3 голосов
/ 08 марта 2012

Вы не будете звонить -prepareForSegue:sender:, вы реализуете это в своем контроллере представления.В переопределении этого метода вы можете проверить свойство identifier в segue (segue передается в качестве параметра):

if ([segue.identifier isEqualToString:@"Segue Numero Uno"]) {
    // do something here
}

Это позволяет вам выполнять какие-то действия в зависимости от того, что вызывает segueпереход.Вы можете установить идентификатор для каждого перехода в редакторе раскадровки.

Обновление: На основе кода, который вы указали в своем комментарии (который я добавил к вашему вопросу), выполучил правильную идею сейчас.На данный момент, это просто вопрос старой доброй отладки.Некоторые вещи для проверки:

  • Контроллер представления в вашей раскадровке (т. Е. Тот, к которому ведут рассматриваемые сегменты) настроен как экземпляр класса, который реализует этот -prepareForSegue:sender:?Проверьте тип контроллера в раскадровке.

  • Соответствуют ли строки, которые вы используете в своем коде точно , идентификаторам, которые вы установили для своих сегментов в раскадровке?Считается заглавные буквы, орфография, пунктуация и пробел.

  • Вызывается ли ваш -prepareForSegue:sender: метод?Поставь точку останова и отладь.Если он вызывается, каков идентификатор для segue, который был передан?Если он не вызывается, контроллер представления в раскадровке не имеет нужного класса.

...