5

我有以下代码,可以更改下一个屏幕上的后退按钮图像。

我的应用中有 30 个屏幕,我希望后退按钮在所有 30 个屏幕上都相同。是否有可能我不会在所有 30 个屏幕上复制粘贴此代码而只编写一次,而是在 30 个屏幕上重复使用它。

此外,当我重用它时,带有后退按钮的代码应该在所有屏幕上都能正常工作

我正在使用 iOS 8 和 Xcode 6。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let backButtonImage: UIImage = UIImage(named: "back")!
    var backBarItem: UIBarButtonItem = UIBarButtonItem(image: backButtonImage, style: UIBarButtonItemStyle.Plain, target: self, action: Selector("method"))

    segue.destinationViewController.navigationItem.leftBarButtonItem = backBarItem;
}

func method() {
    self.navigationController?.popViewControllerAnimated(true)
}
4

5 回答 5

2

您可以全局更改它

UINavigationBar.appearance().backIndicatorImage = UIImage(named: "custom-back")
UINavigationBar.appearance().backIndicatorTransitionMaskImage = UIImage(named: "custom-back")

或每个导航控制器。

override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.backIndicatorImage = UIImage(named: "custom-back")
    navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "custom-back")  
}

完整的细节在这里https://sarunw.com/posts/how-to-change-back-button-image/

于 2020-05-31T13:14:21.683 回答
1

要在 iOS 中更改 UI 元素的外观,请查看UIAppearance。这样你可以设置一次,它会在你的应用程序中无处不在。

我建议在 AppDelegate 中设置它application:didFinishLaunchingWithOptions:

尝试这个:

let backImg: UIImage = UIImage(named: "back")!
UIBarButtonItem.appearance().setBackButtonBackgroundImage(backImg, forState: .Normal, barMetrics: .Default)
于 2015-08-01T09:03:35.790 回答
1

你可以使用外观()

迅速

    let backImage = UIImage(named: "back")
    UINavigationBar.appearance().backIndicatorImage = backImage
    UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
    UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor:
        UIColor.white], for: .normal)
    UIBarButtonItem.appearance().tintColor = UIColor.green
于 2019-04-23T10:07:05.983 回答
1

我的应用程序中只有一个导航控制器,所以这可能有用,也可能没有帮助。但是,我创建了 UINavigationController 的子类。然后在这个子类中,我重写了 pushViewController 方法:

override func pushViewController(_ viewController: UIViewController, animated: Bool) {
    let pushingVC = viewControllers[viewControllers.count - 1]
    let backItem = UIBarButtonItem()
    backItem.title = ""
    pushingVC.navigationItem.backBarButtonItem = backItem
    super.pushViewController(viewController, animated: animated)
}

这使得每次从我的 customNavigationController 推送 viewController 时,它都会为每个视图使用自定义后退按钮。您必须确保将 UINavigationControllers 类型更改为自定义子类。但是,这在 Swift 3.0 中对我有用。

于 2016-09-26T20:34:31.353 回答
0

我不太确定你想要什么,所以我会回答大部分我认为你可能想要的东西,为了你和将来看到这个的任何人。

第一:你想要一个类似于默认苹果应用程序的后退按钮。为此,您需要 a) 获取对目标场景及其视图控制器的引用。我将假设您已经这样做并将其设置为等于以controller供将来参考。b) 您需要设置左栏按钮项。设置它:

controller.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Insert Title Here!!", style: UIBarButtonItemStyle.Plain, target: nil, action: nil)

将所有这些都放入prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)(您还会找到带有此的目标场景,可能带有segue.destinationViewController

第二:您想为所有项目使用名为“Back”的图像。如果是这样,请重复上面的步骤 a),并插入这段方便的代码:

UIBarButtonItem(image: "Back", style: UIBarButtonItemStyle.Plain, target: nil, action: nil)

我也知道您不想复制它,但无论如何这并不是计算机密集型的,它可能是最简单的。

第三:你很聪明,不讨厌编程的进步,所以你想使用故事板。如果是这样,只需从对象菜单中拖入一个导航栏,添加一个导航项,然后将其复制到所有场景中。如果您的场景链接到自定义类,那么超级快乐的好消息是好消息,您可以通过一个简单地将导航项链接到您的自定义类,IBAction并使用该功能来完成您内心渴望的所有花哨的编码。

第四:你真的,真的不想复制任何东西,即使它不那么难。如果是这样,您可以使用您自己的自定义类子类化 UIViewController,添加我上面提到的代码,然后将您未来的所有 UIView 类子类化。老实说,我不完全确定这会奏效,而且看起来不必要地费力,但这取决于你。

我现在有点累,对我觉得有趣的所有事情感到抱歉,但我希望我能有所帮助,如果我完全错过了你的观点,请告诉我,我可以尝试想出一个解决方案。

于 2015-08-01T09:05:38.317 回答