iOS自定义后退按钮 - 删除文本并使用自定义图像

时间:2013-01-28 10:45:02

标签: ios uinavigationcontroller back-button

我正在尝试在我的应用中实现自定义后退按钮。我不想要一个“后面”的头衔或任何前一个VC的头衔。相反,我希望它看起来像所有VC的附加图像。

我尝试在UIBarButtonItem的外观代理上使用setBackButtonBackgroundImage来替换图像,但它仍然显示“后退”标签,我不知道如何摆脱它。

有没有人对实施此方法的最佳做法有任何建议?我需要某种UINavigationController子类吗?或者我是否仍然需要使用我以前看过人们使用的自定义后退方法路径来使用setLeftBarButtonItem(看起来像hacky)?任何帮助将不胜感激。

custom back button image

2 个答案:

答案 0 :(得分:0)

尝试将一个UIButton作为子视图放在leftBarButtonItem中,并带有一个动作和你想要的图像,一切都会很好:)(你可能需要稍微编辑它们,但这不应该是科学:P)< / p>

答案 1 :(得分:0)

在我的许多项目中,我使用自定义后退按钮,它只是一个没有文字的图标。我做了一些实验,找到了最好的方法并提出了下面的方法(我不是说它是最好的方式或唯一的方法,但它适用于我并且稳定)。

我的想法是实现一个Root ViewController,它将重新设置标准后退按钮。事实证明这并不容易。经过大约1天的不同选择,我终于找到了一个有效的解决方案。

诀窍是要有一个足够大的透明背景(大于实际的后雪佛龙,否则会调整到更小的尺寸),然后使用自定义图像作为人字形。

它有效,但正如您在下面的测量中所看到的那样,它有一个小缺点:左侧有额外的14个间隙。如果你想要右边的匹配按钮,你需要补偿14点(是的,它的点在视网膜上这是28像素...)

enter image description here

这是我的代码:

//this vc implements a custom back button, you can make this a root controller
//from which you inherit all your view controllers. But for simplicity reasons for this explanation
//I skipped this

class VCRoot: UIViewController {

 override func viewDidLoad() {
  //call supers
  super.viewDidLoad()
  //create custom back item
  let backItem = UIBarButtonItem()
  //as image set the back chevron icon its a 22x22 points (so 44x44 in retina)
  backItem.image=PaintCode.imageOfBarBtnBack
  let b = PaintCode.imageOfBarBtnBackgroundEmpty
  //as background I use a 1 = 33 points (so 2x66 retina) fully transparant image
  backItem.setBackButtonBackgroundImage(b, forState: UIControlState.Normal, barMetrics: UIBarMetrics.Default)
  //set the newly created barbuttonitme as the back button
  navigationItem.backBarButtonItem=backItem
 }
}

//this vc puts a "forwards" button in the navbar on the right with a matching arrow
//The image of this matching forward arrow is the correct size (width!) so that its the same
//distance from the edge of the screen as the back button

class VC2: UIViewController {

 //outlet to the barbutton item from IB
 @IBOutlet weak var barbtn: UIBarButtonItem!

 override func viewDidLoad() {
  //call supers
  super.viewDidLoad()
 //the forward chevron in the image is shifted 14 points (so 28 retina) to the left 
 //so it has same distance from edge => its (22+14) x 22 = 36 x 22 points (72 x 44 retina) 
  barbtn.image=PaintCode.imageOfBarBtnForward
 }
}

你也可以在这里参考我的博客: http://www.hixfield.net/blog/2015/05/adding-a-custom-back-button-the-standard-way/