当前位置: > > > Swift - 在导航栏左侧或者右侧放置多个按钮

Swift - 在导航栏左侧或者右侧放置多个按钮

(本文代码已升级至Swift4)

使用 navigationItem.leftBarButtonItem 和 navigationItem.rightBarButtonItem 可以很方便的分别设置导航栏左侧和右侧按钮,但一侧只能有一个按钮。
如果想要在一侧使用多个按钮,可以通过 leftBarButtonItems 和 rightBarButtonItems 来实现。 

下面演示给导航栏右侧添加两个按钮(搜索和设置):
同时两个按钮间设置了间距,并将设置按钮顶到边上。
import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //搜索按钮
        let button1 = UIButton(frame:CGRect(x:0, y:0, width:18, height:18))
        button1.setImage(UIImage(named: "search"), for: .normal)
        button1.addTarget(self,action:#selector(tapped1),for:.touchUpInside)
        let barButton1 = UIBarButtonItem(customView: button1)
        
        //设置按钮
        let button2 = UIButton(frame:CGRect(x:0, y:0, width:18, height:18))
        button2.setImage(UIImage(named: "settings"), for: .normal)
        button2.addTarget(self,action:#selector(tapped2),for:.touchUpInside)
        let barButton2 = UIBarButtonItem(customView: button2)
        
        //按钮间的空隙
        let gap = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil,
                                  action: nil)
        gap.width = 15
        
        //用于消除右边边空隙,要不然按钮顶不到最边上
        let spacer = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil,
                                     action: nil)
        spacer.width = -10
        
        //设置按钮(注意顺序)
        self.navigationItem.rightBarButtonItems = [spacer,barButton2,gap,barButton1]
    }
    
    func tapped1(){
        print("搜索按钮点击")
    }
    
    func tapped2(){
        print("设置按钮点击")
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
评论3
  • 3楼
    2016-03-20 20:59
    wahaha

    我接着上面的问题,刚刚那个是不显示,那,还有显示的。
    //定义在 主页视图那的按钮title
    let main = UINavigationController(rootViewController: mainView)
    main.tabBarItem.title = "首页"
    main.tabBarItem.setFAIcon(FAType.FAWhatsapp)
    在外面定义这个main控制器,里面class MainViewController: UIViewController {。。。。 这样定义,那,这个控制器,是导航控制器,还是view控制器?这样在main里面定义的导航按钮,它就出现。


    站长回复

    这样定义的话main是导航控制器。

  • 2楼
    2016-03-20 20:56
    wahaha

    站长,一直在看你网站学习,现在遇到一个问题,就是在导航按钮返回的时候,按钮不出现。代码: let leftBarBtn = UIBarButtonItem(title: "返回", style: .Plain, target: self,
    action: "backToPrevious")
    self.navigationItem.leftBarButtonItem = leftBarBtn
    ,这个是viewcontroller,这个不显示。

    站长回复

    这个我也不太清楚原因,如果viewcontroller外面有导航控制器的话,设置的按钮是会出现的。

  • 1楼
    2015-12-11 14:24
    香蕉

    不知道为什么没有成功

    站长回复

    (1)你有先把导航栏添加进来吗.
    打开Main.storyboard。,点击首页的Scene,选择Editor -> Embed In -> Navigation Controller
    (2)还有就是按钮图片是否存在。