Кнопка "Назад" не работает на навигационном контроллере

У меня странная проблема, которую я не понимаю, и поэтому не знаю, с чего начать отладку.

Во-первых, ТРЕБОВАНИЕ

У меня есть 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];
}
Другие вопросы по тегам