Кто-нибудь может объяснить, как переопределено действие backBarButtonItem? - PullRequest
1 голос
/ 06 июня 2011

Я задал этот вопрос когда-то назад. Но пока нет решения, Вот мой сценарий.

//RootViewController.m
[self.navigationController pushViewController:view1 Animated:YES];

Вот View1.m

UIBarButtonItem *back_of_view2 = [[UIBarButtonItem alloc]initWithTitle:@"Back to RootViewfromview2"
target:self
action:@selector(backClicked:)];
[self.navigationController pushViewController:view2 animated:YES];

А вот метод backClicked: (все еще в view1.m)

-(void)backClicked:(UIBarButtonItem *)back_of_view2
{
[self.navigationController popToRootViewController Animated:YES]
}

Я могу получить кнопку «Назад» в view2 как «back to RootViewfromview2», но действие backClicked не вызывается, и когда я нажимаю «назад», я получаю view1, который является действием по умолчанию. Но когда я устанавливаю leftBarButtonItem в view2.m, т.е.

UIBarButtonItem *backtoOne = [[UIBarButtonItem alloc]initWithTitle:@"JumptorootView" style:UIBarButtonItemStyleBordered target:self action:@selector(someMethod:)];

-(void)someMethod:(UIBarButtonItem *)backtoOne  
{
[self.navigationController popToRootViewController animated:YES];
}

Теперь .., если я использую leftBarButtonItem .., все работает нормально, но я не получу обратную стрелку ..

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

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

Надеюсь, это поможет .......

1 голос
/ 07 июня 2012

Лучший способ справиться с этой ситуацией - viewController2 отправить viewController1 сообщение по протоколу делегата, когда оно собирается выскочить из стека навигации.В этом примере я предполагаю, что viewController2 является экземпляром класса DetailViewController.

@interface DetailViewController : UIViewController
@property (nonatomic, weak) id <DetailViewControllerDelegate> delegate;
@end

@protocol DetailViewControllerDelegate <NSObject>
- (void)detailViewControllerDidFinish:(DetailViewController *)detailViewController
@end

@implementation DetailViewController

@synthesize delegate = _delegate;

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    if ([self isMovingFromParentViewController]) {
        [self.delegate detailViewControllerDidFinish:self];
    }
}

@end
...