swift:在导航栏中设置按钮图像

时间:2014-07-15 23:24:05

标签: ios swift uinavigationcontroller uinavigationbar uinavigationitem

我正在尝试在控制器的导航栏中设置后退按钮图像,这是我在viewDidLoad()中的代码:

        var backImg: UIImage? = UIImage(named: "back_btn.png")
    println(backImg)
    if var back_img = backImg  {
        println("GET IT")
        println(back_img)
        println(UIControlState.Normal)
        println(UIBarMetrics.Default)
    self.navigationController.navigationBar.backItem.backBarButtonItem.setBackButtonBackgroundImage(back_img, forState: UIControlState.Normal, barMetrics: UIBarMetrics.Default)
    }

我试图将它们放到viewWillLoad中,但是得到了相同的错误

控制台,显示错误消息:

<UIImage: 0x7ff37bd85750>
GET IT
<UIImage: 0x7ff37bd85750>
VSC14UIControlState (has 1 child)
(Enum Value)
fatal error: unexpectedly found nil while unwrapping an Optional value

我不知道哪个部分出了问题。看起来像back_img不是零,但我得到错误说它是零

谢谢!

7 个答案:

答案 0 :(得分:18)

Swift 3.0 + 中将appdelegate didFinishLaunchingWithOptions方法中的代码放在下方,它将完美运行

let backImage = UIImage(named: "BackNavigation")?.withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -80.0), for: .default)

如果您不想删除标题,那么最后一行将删除Navigation Back Button的标题,然后删除最后一行

答案 1 :(得分:15)

如果您想更改每个控制器中的后退按钮,可以将其添加到didFinishLaunchingWithOptions中的app delegate

    let backImg: UIImage = UIImage(named: "back_button")!
    UIBarButtonItem.appearance().setBackButtonBackgroundImage(backImg, forState: .Normal, barMetrics: .Default)

答案 2 :(得分:12)

我已经通过查看示例代码找到了答案。 1)在故事板中创建一个条形按钮项。 2)使用IBOutlet将该按钮链接到控制器 3)将图像添加到按钮

 var backImg: UIImage = UIImage(named: "back_btn")
 backBtn.setBackgroundImage(backImg, forState: .Normal, barMetrics: .Default)

PS:图像应添加到Images.xcassets文件夹,详见示例代码UICatalog

答案 3 :(得分:9)

import datetime
from pyspark.sql.types import*

def getTime():
    timevalue=datetime.datetime.now()
    return timevalue
def GetVal(x):
    if(True):
     timevalue=getTime()
     return timevalue
spark.udf.register('GetTime', lambda(x):GetVal(x),TimestampType()) 
spark.sql("select GetTime('currenttime')as value ").show()

答案 4 :(得分:4)

//这是完美的解决方案在默认导航栏中使用图像和操作设置后退按钮

首先在导航栏中添加UIBarButton

enter image description here

然后转到故事板中的文件检查器中的属性并添加空格以隐藏按钮标题文本

在Ui Bar按钮图像中设置图像

enter image description here

/ 写上点击操作方法 /

要启用滑动以弹出(返回上一个控制器),请在ViewDidLoad方法中写入两行代码

enter image description here

你将获得完美的后退按钮和滑动以支持动画

enter image description here

//注意: - 要禁用后退按钮以前的viewcontroller标题,请在storyboard文件检查器的后退按钮中的标题文本中添加一个空格

答案 5 :(得分:1)

替代方式: 单击storyboard中的导航控制器(而不是UIViewController本身中的导航控制器)。然后,在RHS的属性部分中,您将看到背面图像和背面遮罩。设置图像并完成。

答案 6 :(得分:0)

Swift 4+版本

let backImage = UIImage(named: "back-icon").withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: -80.0), for: .default)