0

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

загружаю мнение в вопросе через:

-(IBAction) linkPress:(id)sender 
{ 
    potentialUrl = [[NSURL alloc] initWithString:((Button*)sender).emailContent]; 

    webViewInst = [[WebView alloc] initWithNibName:@"WebView" bundle:nil url:potentialUrl]; 

    NSString *deviceType = [UIDevice currentDevice].model; 
    if([deviceType isEqualToString:@"iPad"] || [deviceType isEqualToString:@"iPad Simulator"]){ 
     [self presentModalViewController:webViewInst animated:YES]; 
    } 
    else { 
     [self.navigationController pushViewController:webViewInst animated:YES]; 
    }  
} 

добавить кнопку назад через:

UIBarButtonItem *MKbackBtn = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButton:)]; 
[self.navigationItem setLeftBarButtonItem:MKbackBtn]; 

и действие, что кнопка спина должна принять, чтобы удалить представление и вернуться к предыдущий вид:

-(IBAction)backButton:(id)sender 
{ 
    UIViewController* parent = [self parentViewController]; 
    if(parent==nil) { 
     parent = [self presentingViewController]; 
    } 
    [parent dismissModalViewControllerAnimated:YES]; 
} 

Если другой набор глаз мог пройти через эти биты кода и попытаться узнайте, какую ошибку я сделал, это было бы очень признательно! Я более чем готов предоставить дополнительную информацию/код.

Спасибо!

ответ

1

Вы звоните dismissModalViewControllerAnimated, но основанный на ваш код выше есть вероятность того, что он не представлен как модальный и вместо этого надавлен на navStack, и в этом случае dismissModalViewControllerAnimated фактически не отклонит его. Вместо этого вам нужно будет сделать popViewController и т. Д. Вы должны быть обложки вокруг средств презентации. Можете ли вы подтвердить, что это не является частью проблемы?

Кроме того, с головы до головы, я думаю, вы бы назвали [self dismissModalViewController...], а не parent.

+0

Насколько я могу судить, я не могу использовать 'popViewController'. Как я могу подтвердить, что я не делаю то, что вы предлагаете, проблема может быть? Я думаю, что я не понимаю вас где-то там. – VonKoob

+0

Ах, моя ошибка. Я смог использовать 'popviewController' для выполнения функции, которую я хотел, я просто замалчивал небольшую ее часть, которая предотвратила автозаполнение. Кроме того, почему представление было введено в navStack, а не как ModalViewController? – VonKoob

+0

Удивительный! Я просто хотел сказать, что считаю, что вы можете проверить стиль презентации себя и использовать это как условие для выбора метода увольнения ... в основном, в вашем первом блоке кода вы используете модальный для ipad, но navstack для iphone , Я предполагаю, что вы тестировали по телефону, что означало, что команда rejectModal не работает, потому что viewController не был представлен модально, нет? –

0

Отображение контроллера вида по образцу не включает его в стек навигационного контроллера. Вы должны предоставить свой собственный механизм пользовательского интерфейса, чтобы отклонить модальный вид. Она смотрит на меня, как ваше решение уволить контроллер представления модально должен в основном работать - хотя я думаю, что все, что вам нужно, это одна строка в backButton::

[self dismissModalViewControllerAnimated:YES]; 
+0

ПРИМЕЧАНИЕ. Я полагаю, что обработчик 'backButton:' используется только для вашего контроллера модального представления. Для ваших контроллеров представления в стеке UINavigationController вы должны придерживаться стандартного поведения кнопки «Назад». Если вы действительно не хотите использовать свою собственную кнопку возврата, в этом случае придерживайтесь своей реализации, но вызывайте 'rejectModalViewControllerAnimated:' на себя, а не на родителя. –

+0

Использование кода '[self rejectModalViewControllerAnimated: YES];' не удалял представление. Что касается стандартного поведения кнопки «Назад», на экране нет кнопки «Назад». Я бы скорее использовал стандартную кнопку «Назад», но из-за ее исчезновения мне пришлось реализовать свою собственную кнопку «Назад». – VonKoob

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