如何在 UISplitViewController 中命名后退按钮

How to name a back button in UISplitViewController

我有 UITableViewController(它的名字是 News)和 UIViewController(它的名字是 DetailViewController)和 UISplitViewController。当我在纵向使用 iPad 时,我希望它显示一个后退按钮。我制作了按钮,但无法命名。我写了下面的代码

detailController.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
                detailController.navigationItem.leftItemsSupplementBackButton = true
                detailController.navigationItem.leftBarButtonItem?.title = navigationController?.topViewController.title

但它不显示按钮的名称。我只看到箭头(箭头有效)。

我还在我的 UITableViewController(News) 中尝试了以下方法,但它对我没有帮助

我使用此代码为不同的设备使用两个 segue。

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
        var screen = UIScreen.mainScreen().currentMode?.size.height
        if (UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad) || screen >= 2000 && UIDevice.currentDevice().orientation.isLandscape == true  && (UIDevice.currentDevice().userInterfaceIdiom == .Phone){
            performSegueWithIdentifier("showDetailParse", sender: nil)
            self.dismissViewControllerAnimated(true, completion: nil)
        } else if (UIDevice.currentDevice().userInterfaceIdiom == .Phone) {
            performSegueWithIdentifier("showParse", sender: nil)
        }
    }

我的结果 iPad

我的结果 iPhone

感谢 Paul Hegarty 和他在斯坦福大学的宝贵讲座,并在 iTunes U 上提供...在这种情况下,他 2013 年的讲座标题为 "Developing iOS 7 Apps for iPhone and iPad",特别是 "Lecture 11 Table View and the iPad"。

如果您使用故事板,则:

  • 打开主故事板和 select 链接到拆分视图控制器组中的主视图控制器的导航控制器;
  • 打开检查器;
  • View Controller 标题下,针对 属性 Title,输入您希望出现在旁边的词"Back" 人字形按钮。

查看使用 Split View Controller 设置的 Master Detail Xcode 模板的屏幕截图...

如果您在代码中实例化视图,则:

  • 获取对主视图控制器的导航控制器的引用;
  • 设置该导航控制器的标题 属性,其中包含 NSString 个您希望出现在 "Back" 人字形按钮旁边的字词。

顺便说一句,我强烈建议您实施自动布局和大小 类,删除 后退按钮 属性 的文本和让大小 类 确定适合您的后退按钮的字词。

例如,根据问题...

解决方案:

以下是解决 detail 视图控制器后退按钮问题的方法:

  • 对于任何被推入导航控制器堆栈的视图控制器,设置视图控制器title。 (在其 viewDidLoad: 方法中或在推送视图控制器的 prepareForSegue:sender: 方法中。)
  • 在 child 视图控制器的 viewDidLoad: 方法中设置 主导航控制器的 title

例如,在MasterViewController.m中:

- (void)viewDidLoad {
    [super viewDidLoad];

    [self setTitle:@"Foo"];
}

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

    [[self navigationController] setTitle:[self title]];
}

这将使详细视图控制器的后退按钮标题与顶部主视图控制器的标题保持同步。

发生了什么:

UINavigationController、其rootViewControllerUINavigationItem各有一个title属性.

注意 the back button shown for a current view controller is actually the previous view controller's backButtonItem。 (见图1-7导航栏结构)

A UINavigationController 将自动继承其根视图控制器的 title 的值,但 不会自动继承任何其他被推送的控制器的标题 到它的堆栈上。这就是为什么默认情况下 detail 视图控制器的后退按钮将始终显示 primary 导航控制器的 的标题root 视图控制器。您可能会分配、初始化和推送多个 child 视图控制器,但只会为标准拆分视图控制器的每一侧分配和初始化一个导航控制器。

此外,视图控制器的 navigationItemtitle 属性(其值将出现在导航栏中央的标签中)不会从导航控制器 继承它的值,但是从视图控制器本身继承它的值。如果将视图控制器的 title 属性 设置为“Bar”,并将包含的导航控制器的标题设置为“Foo”,则显示在导航栏中央的标签将显示为“Bar”。