2

Вопрос по iphone, uiviewcontroller, uinavigationcontroller – iPhone - Изменить цель или селектор для кнопки «Назад» на UINavigationController

Поведение по умолчанию при нажатии UIViewController на UINavigationController заключается в том, что ОС отображает кнопку «Назад», которая снова отключает UIViewController. У меня есть желание установить другое поведение для этой кнопки назад ...

5 ответов

2

С использованием "leftBarButtonItem» позволяет установить цель и селектор. Но если вы установите "backBarButtonItem» на предыдущем контроллере цель и селектор будут игнорироваться. Однако leftBarButtonItem не имеет левой стрелки.

4

Как я и подозревал наполовину, это неЭто возможно любым простым способом. Тот же метод применяется при создании любого пользовательского UIBarButtonItem, просто нужно получить значок кнопки назад из Google ....

UIButton *backButtonInternal = [[UIButton alloc] initWithFrame:CGRectMake(0,0,54,30)];
[backButtonInternal setBackgroundImage:[UIImage imageNamed:@"backButton.png"] forState:UIControlStateNormal];
boldSystemFontOfSize:12]];
[backButtonInternal addTarget:self action:@selector(backButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithCustomView:backButtonInternal];   
[backButtonInternal release];
[[self navigationItem] setLeftBarButtonItem:backBarButton];
[backBarButton release];
0

В родительском монастыреs viewcontroller,

- (void)viewDidLoad
{    
    self.navigationController.delegate= self;
}

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (viewController == self)
    {
        // your codes
    }
}
0

Если вы создаете подкласс для своего контроллера навигации, вы можете реализовать метод popViewControllerAnimated: и добавить туда isKindOfClass: чтобы определить, является ли контроллер представления вашимВ поисках выскочил. Например:

- (UIViewController *)popViewControllerAnimated:(BOOL)animated
{
    //Reference current controller being displayed
    UIViewController *currentController = [self.viewControllers lastObject];

    //Check class
    if ([currentController isKindOfClass:[MyDesiredController class]]) {
        NSLog(@"Popping Desired Controller, Do Stuff Here");
    }

    return [super popViewControllerAnimated:animated];
}

Однако это не отменяет фактическое выталкивание контроллера представления (возвращение nil остановит всплывающее окно контроллера, но все равно вызовет всплывающую подсказку на панели навигации).s и возвращая NO методу shouldPop: делегат панели навигации, он все равно будет выталкивать контроллер. Я слышал, что это происходит только при использовании контроллера навигации, но я неЯ проверил это).

Однако в вашей ситуации, поскольку вы хотите вернуть два контроллера представления назад, вы можете удалить второй последний контроллер представления из контроллера навигации 'Свойство viewcontrollers путем преобразования viewcontrollers в nsmutablearray, удаления контроллера, а затем преобразования этого nsmutablearray обратно в массив и установки его в качестве контроллера навигации.Свойство viewcontrollers. У меня нетЯ проверил это, но я решил поделиться этой идеей.

0

Что-то не так с UIViewController 'свойство навигационного элемента? Вот'Как мне получить кнопку отмены, например:

self.navigationItem.leftBarButtonItem =
  [[[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemCancel
                                               target: self
                                               action: @selector(cancel)] autorelease];  

Похожие вопросы