Переключатель IOS и раскадровка не работают

У меня проблема с переключением взглядов. Я использую симулятор с xcode 4.2.

Раскадровка содержит:

  • NavigationController (начальный контроллер представления)
  • UIViewController, связанный с навигационным контроллером
  • UIViewController (в паре с моим пользовательским классом: ViewEntryImageController), который не имеет никакого отношения. Содержит кнопку, нижнюю панель инструментов с некоторой кнопкой панели инструментов.

Пользователь заходит в UIViewController, где он может видеть ScrollView, а в ScrollView несколько изображений.

Изображения имеют жест:

    UITapGestureRecognizer *recognizer=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(openEntryImage)];
    [image addGestureRecognizer:recognizer];
    [recognizer release];

Функция openEntryImage:

(IBAction)openEntryImage
{
    ViewEntryImageController *controller=[[ViewEntryImageController alloc]initWithNibName:nil bundle:nil];
    controller.modalTransitionStyle=UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:controller animated:YES];
    [controller release];
}

Когда я пытаюсь нажать на изображение, openEntryImage тоже работает (эффект правильный), но я не вижу своего вида ViewEntryImageController и своих кнопок, я вижу только черное окно.

Я пытаюсь поместить строку NSLog в функцию ViewEntryImageController viewDidLoad, и она работает, так что же такое черное окно и где мой контроллер представления?

Когда я пытаюсь использовать pushViewController, в новом представлении я обнаружил панель инструментов навигации с кнопкой «Назад», но никаких других элементов управления.

Я попробовал другую версию, я создал класс UIViewController, но теперь с файлом xib. Я использовал его вместо ViewEntryImageController, и он работает. Почему? Я тоже хочу использовать этот контроллер в раскадровке.


person mudlee    schedule 29.11.2011    source источник


Ответы (2)


Попробуйте так:

ViewEntryImageController *controller=[[ViewEntryImageController alloc]initWithNibName:@"ViewEntryImageController" bundle:nil];

Если вы не используете имена .nib, а используете раскадровки, это немного сложнее. Создайте переход от контроллера к контроллеру ViewEntryImageController, удерживая клавишу Ctrl и перетаскивая из одного представления в другое. Нажмите на этот переход и дайте ему идентификатор.

Затем используйте функцию [self performSegue:@"identifier"];, чтобы представить следующее представление.

person Tom van der Woerdt    schedule 29.11.2011

Класс ViewEntryImageController сам по себе не имеет информации о том, как построить диалог. Но вы можете создать свой контроллер представления самостоятельно из раскадровки:

UIStoryboard *myStoryboard = [UIStoryboard storyboardWithName:@"StoryboardFileName" bundle:nil];
ViewEntryImageController *controller = (ViewEntryImageController *)[myStoryboard instantiateViewControllerWithIdentifier:@"ViewEntryImage"];

Это предполагает, что имя раскадровки StoryboardFileName и что контроллер изображения записи представления имеет идентификатор ViewEntryImage, установленный в свойствах представления (инспектор атрибутов, раздел «Контроллер представления»).

person Dennis Bliefernicht    schedule 29.11.2011
comment
Было бы здорово принять ответ или хотя бы проголосовать, если он сработает ;-) (Вы можете принять только один ответ на вопрос) - person Dennis Bliefernicht; 29.11.2011
comment
Да, я знаю. Ваш ответ отличный, но предыдущий короче, и я люблю короткие коды :) Я пытался проголосовать, но пока не могу, потому что: для голосования требуется 15 репутации, извините, и еще раз большое спасибо. Когда я получу это, я вернусь и проголосую за :) - person mudlee; 02.12.2011
comment
О, я вижу, тогда нет проблем :-) - person Dennis Bliefernicht; 02.12.2011
comment
+1 Вау! Это решило мою затянувшуюся битву с проблемой! :) Спасибо! - person Jean; 19.07.2012