Похоже, вы используете раскадровку, которая содержит представления как для RootViewController, так и для UrlViewController. Если это так, вам нужно создать экземпляр UrlViewController, используя раскадровку:
UrlViewController* webController = [self.storyboard instantiateViewControllerWithIdentifier:@"UrlViewController"];
Используйте это вместо того, чтобы распределять initController в вашем tableView: didSelectRowAtIndexPath: метод. Кроме того, в раскадровке, содержащей представления для обоих этих контроллеров представления, установите поле Идентификатор в разделе «Контроллер представления» инспектора атрибутов в Интерфейсном Разработчике в качестве строки UrlViewController. Причина, по которой это делается вместо того, чтобы просто использовать init, заключается в том, что файл, описывающий представление для UrlViewController, находится внутри раскадровки, поэтому выделение, инициирующее UrlViewController, означает, что он не найдет связанный с ним вид и просто покажет черный экран. 1004 *
Вы также можете сделать это с помощью отношений Push. Вместо tableView: didSelectRowAtIndexPath: метод, вы просто установили бы отношение Push (переход) от ячейки в RootViewController к UrlViewController. В файле RootViewController.m добавьте следующий метод:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"PassUrlToUrlViewControllerSegue"]) {
segue.destinationViewController.urlAddress = @"http://www.yahoo.com";
}
}
Это потребует от вас установки идентификатора для передачи push. Выберите стрелку, представляющую ход push, в раскадровке и установите для ее идентификатора строку PassUrlToUrlViewControllerSegue.
Вы можете сделать это динамическим, используя параметр sender, данный вам в prepareForSegue: sender: чтобы определить, какая ячейка была выбрана и, следовательно, какая ссылка для передачи.