Как обрабатывать два перехода к одному и тому же контроллеру представления?

StackOverflow https://stackoverflow.com//questions/9609676

  •  09-12-2019
  •  | 
  •  

Вопрос

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

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

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

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"helpSegue"]) {
        NSLog(@"helpSegue");
    }
    else if ([segue.identifier isEqualToString:@"reportSegue"]) {
        NSLog(@"reportSegue");
    }
}
Это было полезно?

Решение

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top