如何显示后退按钮上的UINavigationController的RootViewControlle

2019-06-25 23:07发布

这里是我的代码。 我希望把开幕RootViewController的后退按钮。

- (void)selectSurah:(id)sender {

    SurahTableViewController * surahTableViewController = [[SurahTableViewController alloc] initWithNibName:@"SurahTableViewController" bundle:nil];
    surahTableViewController.navigationItem.title=@"Surah";

    surahTableViewController.navigationItem.backBarButtonItem.title=@"Back";

    UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:surahTableViewController];

    [self presentModalViewController:aNavigationController animated:YES];   
}

Answer 1:

我不相信这是可能弹出关闭导航堆栈的根视图控制器,但你可以用假它UIButton添加为的自定义视图UIBarButtonItem

UIButton *b = [[UIButton alloc]initWithButtonType:UIButtonTypeCustom];
[b setImage:[UIImage imageNamed:@"BackImage.png"] forState:UIControlStateNormal];
[b addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside];
self.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:b];

的iOS UI元素的合适的PSD可以找到这里 。



Answer 2:

Faizan,

Helium3评论是有道理的。

我想,你的按钮需要解雇模态呈现控制器,是真的吗? 正确的,如果我错了。

如果是这样,你可以只创建一个新UIBarButtonItem ,并集是左(或右)按钮为UINavigationController navigationItem 。 为了不破坏封装在创建它viewDidLoad方法为您SurahTableViewController控制器。

- (void)viewDidLoad
{
    [super viewDidLoad];

    // make attention to memory leak if you don't use ARC!!!
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close"
           style:UIBarButtonItemStyleBordered
             target:self
             action:@selector(close:)];
}

-(void)close:(id)sender
{
    // to dismiss use dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion
    // dismissModalViewControllerAnimated: is deprecated

    [self dismissViewControllerAnimated:YES completion:^{ NSLog(@"controller dismissed"); }];
}


Answer 3:

由于SurahTableViewController是一个导航控制器根视图控制器,因为你已经在那里你不能回去的根源。 既然你从别的模态呈现它,你需要把一个具有导航栏上的按钮IBAction其中要求:

[self dismissModalViewControllerAnimated:YES];


Answer 4:

在一个UINavigationController后退按钮的外观和行为依赖于相互作用UINavigationControllers的叠层之间。 把第一个控制器发生后退按钮这个约定,没有什么回去,这就是为什么你的代码不能正常工作。

你需要手动添加的UIBarButtonItem像标题栏的代码:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(back:)];

如果你真的希望它看起来像一个返回按钮,你将需要与反映后退按钮的图像手动创建的UIBarButtonItem。

另一项建议虽然,因为它看起来像你正在尝试使用后退按钮以关闭一个模式视图控制器,我会的东西更传统的像一个“关闭”或“完成”按钮坚持关闭模式视图控制器。 返回按钮实在是更适合于导航UINavigationControllers的堆栈。



文章来源: How to show back button on the RootViewController of the UINavigationController?