如何更改导航返回项目功能,返回rootView

时间:2016-12-28 02:12:22

标签: ios swift cocoa-touch uinavigationcontroller

我有一个问题。

我使用show(vc)来呈现视图控制器。

vc1 - > vc2 - > VC3

当用户点击vc3上的后退按钮时,我想从vc1重定向用户,以实现我使用下面提到的代码。

 override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationItem.hidesBackButton = true
    let newBackButton = UIBarButtonItem(title: "<", style: UIBarButtonItemStyle.plain, target: self, action: #selector(backToRoot(sender:)))
    self.navigationItem.leftBarButtonItem = newBackButton 
}

func backToRoot(sender: UIBarButtonItem) {

    _ = self.navigationController?.popToRootViewController(animated: true)
}

我想要后退按钮的默认图像,而不是自定义按钮。

我有办法做到吗?

1 个答案:

答案 0 :(得分:0)

我今天就这么做了。我发现无法改变系统后退按钮的动作。为了看起来像系统风格,我绘制相同的图片(快照模拟器,并在照相馆更改)。代码如下:

let button: UIButton = UIButton(type: .system)

高度的默认大小为30,宽度是您设置的任何值

button.frame = CGRect(x: 0, y: 0, width: 80, height: 30)
button.setImage(UIImage(named: "BackButton"), for: .normal)

默认字体如下:

button.setTitle("Back", for: .normal)
button.titleLabel?.font = UIFont(name: "AvenirNext", size: 15)

这是诀窍,你需要找到与系统相同的位置,以下是我的结果,我调整了很多次。我希望你能用,但我认为你需要找到自己的尺寸

button.imageEdgeInsets = UIEdgeInsetsMake(0, -43, 0, 0)
button.titleEdgeInsets = UIEdgeInsetsMake(0, -33, 0, 0)

button.addTarget(target, action: action, for: .touchUpInside)
let barButton = UIBarButtonItem(customView: button)