【问题标题】:How to name a back button in UISplitViewController如何在 UISplitViewController 中命名后退按钮
【发布时间】:2015-09-27 21:48:48
【问题描述】:

我有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 上的结果

【问题讨论】:

  • 在前一个视图控制器上设置一个标题。它成为下一个视图控制器的后退按钮标题
  • 我把它做成了我的截图。 @rounak
  • 它只对我有用,我使用 iPhone。 @rounak
  • 我在一个屏幕上遇到了同样的问题,我找不到解决方案。在我的情况下,总是显示返回。

标签: ios xcode swift ipad uisplitviewcontroller


【解决方案1】:

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

如果您使用情节提要,那么:

  • 打开主情节提要并选择链接到拆分视图控制器组中主视图控制器的导航控制器;
  • 打开检查器;
  • 在标题 View Controller 下,针对属性 Title,输入您希望出现在“返回”按钮 V 形旁边的字词。

查看使用拆分视图控制器设置的 Master Detail Xcode 模板的屏幕截图...

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

  • 为主视图控制器获取导航控制器的引用;
  • 使用您希望出现在“返回”按钮 V 形旁边的单词的 NSString 设置导航控制器的标题属性。

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

例如,根据问题...

【讨论】:

    【解决方案2】:

    解决方案:

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

    • 对于任何被推送到导航控制器堆栈的视图控制器,设置该视图控制器的title。 (无论是在其viewDidLoad: 方法中,还是在推送视图控制器的prepareForSegue:sender: 方法中。)
    • 在子视图控制器的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 导航栏结构)

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

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

    【讨论】:

    • 这是一个很好的解决方案。谢谢!我的 DetailViewController 后退按钮(在 iPad 上处于水平模式下,主用 displayModeButton 隐藏)一直显示主导航控制器 rootViewController 标题。即使我已经将另一个 childView 推送到导航堆栈上。很高兴我找到了这个很好的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 2010-10-13
    • 2012-04-09
    • 2013-11-25
    • 2011-01-22
    • 2016-12-30
    • 1970-01-01
    相关资源
    最近更新 更多