2012-05-31 3 views
5

Я хочу создать модальный вид с элементом навигации (правый вид на моем снимке экрана), и я хочу, чтобы у него была кнопка «назад». Мое приложение - приложение TabBar, и я не хочу, чтобы в этом представлении была панель вкладок, но я хочу загрузить предыдущее представление (левое изображение на моем скриншоте) с шагом, подобным типу «push». Я могу создать только push segue, чтобы обеспечить правильную навигацию обратно к виду слева, если он загружен как модальный вид, TabBar NavigationBar & исчез. Какие-нибудь обходные пути для этого? Спасибо заранее!Создайте модальный вид с навигационной панелью и кнопкой назад

Here's my screenshot

+0

Что не так с представлением модального вида (справа) и с кнопкой назад, чтобы отменить его, чтобы вернуться к UITableView, который показан слева? – tarheel

+0

Потому что это UIWebView с динамическим контентом, и я хочу, чтобы кнопка возврата была на панели навигации. –

ответ

12

Просто поместите Navbar в новый вид с помощью элемента кнопки. Создайте действие для элемента кнопки панели, перетаскивая элемент управления из элемента кнопки панели в .h контроллера вида. Затем вы можете использовать делегат и протокол метода сказать первый контроллер, когда кнопка была нажата и он использовать [self dismissModalViewControllerAnimated:YES];

Так что в вашем втором зрения создать протокол с методом сделано, как это:

@protocol SecondViewControllerDelegate <NSObject> 

-(void) done; 

@end 

@interface SecondViewController : UIViewController { 
    ... 
    id delegate; 
} 

... 

@property (nonatomic, assign) id<SecondViewControllerDelegate> delegate; 

-(IBAction)done:(id)sender; //this will be linked to your nav bar button. 
@end 

затем в ваше действие из вашей кнопки называем это:

-(IBAction)done:(id)sender{ 
    [self.delegate done]; 
} 

Ваш первый вид контроллера необходимо для реализации протокола <SecondViewControllerDelegate>

, то в своем первом контроллере просмотра установите его в качестве делегата для вашего второго контроллера представления перед тем, как вы перейдете.

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([[segue identifier] isEqualToString:@"Second View Modal Segue Identifier"]) 
    { 
     SecondViewController *viewController = segue.destinationViewController; 
     viewController.delegate = self; 
    } 
} 

наконец, поймать сделал звонок от делегата в первом контроллере представления:

-(void) done 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

Вот как я это сделал. Если у вас нет большого опыта работы с протоколами и делегатами, это может показаться сбивающим с толку вначале, но это сработало хорошо для меня.

+0

извините, если есть какие-либо опечатки, я набрал все это с нуля только сейчас. –

6

Вам нужно будет обернуть правый контроллер представления стороны в новом навигационном контроллере. В IB выберите его и выберите пункт меню Editor -> Embed In -> Navigation Controller, а IB отобразит навигационную панель, которую вы можете настроить для вашего сердца.

+0

Будет ли это предлагать это как модальное представление? –

+0

Да, действительно. На iPad у вас может быть меньше централизованного представления. Вы должны реализовать свои собственные кнопки в навигационной панели для отклонения. – Mundi

+1

Спасибо. В iOS 7, если я просто перетащил навигационную панель, это будет выглядеть плохо, поскольку фон «временной шкалы», в отличие от навигационной панели, не имеет серого фона. Но этот метод решил проблему и кажется более элегантным. –

Смежные вопросы