Кнопка "Назад" не работает на навигационном контроллере
У меня странная проблема, которую я не понимаю, и поэтому не знаю, с чего начать отладку.
Во-первых, ТРЕБОВАНИЕ
У меня есть UISplitView. Основное представление содержит таблицу, которая загружает различные представления в подробное представление. Для одной ячейки таблицы я хочу, чтобы сайт загружался в полноэкранном режиме. Поэтому вместо того, чтобы скрывать основной вид и изменять его размер, я представляю контроллер вида. Именно с этим у меня проблема.
КОД
Ниже приведен код, который у меня есть в настоящее время - значительно сокращен, чтобы избежать беспорядка
-- MASTER VIEW --
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
ProjectWebViewController *detailView=[[ProjectWebViewController alloc] init];
UIViewController *localdetailViewController = detailView;
UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:localdetailViewController];
[self presentViewController:navController animated:YES completion:nil];
}
У меня тогда есть следующее в представленном контроллере представления
-- PRESENTED VIEW CONTROLLER --
- (void)viewDidLoad
{
[super viewDidLoad];
UIWebView * webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)];
NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];
[[self view] addSubview:webView];
UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:nil action:@selector(closeSelf)];
[[self navigationItem] setLeftBarButtonItem:backBtn];
}
-(void)closeSelf
{
[[self navigationController] dismissViewControllerAnimated:YES completion:nil];
}
ЭТА ПРОБЛЕМА
Вышесказанное работает хорошо с одним исключением. Кнопка "Назад", которую я добавил на панель навигации, ничего не делает при нажатии. Однако, если я нажимаю на любое пустое место на загруженной веб-странице, кнопка "Назад" работает. Я проверял это много раз. Даже если я щелкну пробел, а затем нажму на ссылку на веб-странице, кнопка "Назад" снова перестает работать, пока на текущей веб-странице не будет нажата дополнительная пробел.
Кто-нибудь может указать мне правильное направление?
Спасибо
2 ответа
UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:nil action:@selector(closeSelf)];
цель должна быть установлена на себя, а не на ноль
UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(closeSelf)];
Я бы порекомендовал, поскольку страница занимает весь экран вместо того, чтобы выдвигаться в качестве контроллера подробного представления в разделенном представлении, чтобы добавить его на экран в виде UIView и добавить его в родительский, чтобы вам не нужно было беспокоиться обо всем навигационный контроллер. Тогда вы могли бы просто позвонить [self.view removeFromSuperview];
отклонить веб-просмотр.
Внутри вызова didSelectRowForIndexPath createModalWebView
для вашего выбора строки; Ниже приведен небольшой непроверенный код, который должен работать на основе предоставленного вами кода.
- (void)createModalWebView{
UIWebView * webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)];
NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];
//YOUR MASTERVIEW
[[self view] addSubview:webView];
UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:nil action:@selector(closeSelf)];
[[self navigationItem] setLeftBarButtonItem:backBtn];
}
-(void)closeSelf
{
//REMOVE THE WEBVIEW FROM SCREEN
[[self view] removeFromSuperview];
}