导航栏按钮和未在swift 3中显示的项目

时间:2017-09-22 05:16:11

标签: ios swift uinavigationcontroller

enter image description here

我在swift中以编程方式使用导航栏,但是无法在导航栏中显示栏按钮项, 这是我做的代码

override func viewDidLoad() {
        super.viewDidLoad()

  let navBar: UINavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: 420, height: 65))
        self.view.addSubview(navBar)

        navBar.backgroundColor = hexStringToUIColor("4DC8BD")

        let navigationItem = UINavigationItem()

       self.title = "Transport APP"

        let btn1 = UIButton(type: .custom)
        btn1.setImage(UIImage(named: "Menu1"), for: .normal)
        btn1.frame = CGRect(x: 30, y: 30, width: 30, height: 30)
        btn1.addTarget(self, action: #selector(HomeViewController.menubuttonclick(_:)), for: .touchUpInside)
        let item1 = UIBarButtonItem(customView: btn1)


         self.navigationItem.setRightBarButtonItems([item1], animated: true)

}

    @IBAction func menubuttonclick(_ sender:UIBarButtonItem )
    {

        print("this menu button click")

    }

我可以尝试很多方法但是没有得到结果 如何在导航栏中显示节目栏按钮项目,

5 个答案:

答案 0 :(得分:4)

您应该将chkValue = chkValue.replace(/\W/g, ''); 添加到UINavigationItem item1 需要添加到 navitem 中查看以下代码

UINavigationBar

答案 1 :(得分:4)

Swift 3 +:定义按钮。

//:: Left bar items
     lazy var leftBarItem: Array = { () -> [UIBarButtonItem] in
            let btnBack = UIButton(type: .custom)
            btnBack.frame = kBAR_FRAME
            btnBack.addTarget(self, action: #selector(clickOnBackBtn(_:)), for: .touchUpInside)
            let item = UIBarButtonItem(customView: btnBack)
            item.tag = 3
            return [item]
    }()

将此行添加到viewDidLoad

 self.navigationItem.setLeftBarButtonItems(self.leftBarItem, animated: true)

栏按钮操作

@objc func clickOnBackBtn(_ sender: Any){

    }

答案 2 :(得分:4)

虽然其他提到的解决方案肯定适用于以编程方式定义导航项,但有些人更喜欢故事板解决方案。我搜索了一个Swift 4,Xcode 9故事板解决方案但无法找到,所以我将展示我的解决方案。

这是添加条形按钮项之前我的故事板的屏幕截图。 enter image description here

我遇到的问题是,当Shops tableview嵌入在导航控制器中时,添加一个条形按钮项是没有问题的;通过didSelectRowAt函数中的导航控制器推送Employees表视图。


extension ShopsViewController: UITableViewDelegate {
  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let selectedShop = fetchedResultsController.object(at: indexPath)
    let st = UIStoryboardname: "Main", bundle: Bundle.main)
    let vc = st.instantiateViewController(withIdentifier: "EmployeeViewController") as! EmployeeViewController

    vc.shop = selectedShop

    self.navigationController?.pushViewController(vc, animated: true)
  }
}

结果是我无法从故事板中拖动一个条形按钮项。当我尝试时,该项目将最终位于底部的标签栏中。 enter image description here

我发现一篇文章建议在导航控制器中嵌入第二个视图控制器,但这会增加我想避免的其他复杂程度。我找到的工作是将导航项拖动到导航栏区域,然后您可以添加一个没有问题的栏按钮项。

enter image description here

结果如下:enter image description here

我知道故事板或程序化布局是否更好有很多争论。虽然我仍然是一个非常初级的iOS开发人员而且无法亲自与之交谈,但我发现有时候故事板解决方案最适合这个问题。我希望这有助于其他初学者。

答案 3 :(得分:0)

如果您已经创建了UINavigationController(),则可以使用self.navigationItem这样设置导航项(在viewDidLoad函数中):

self.navigationItem.title = "Transport APP"
self.navigationItem.rightBarButtonItem = item1

但如果你需要知道如何为视图创建UINavigationController(),可以在AppDelegate类中执行此操作:

let myView = ... //initial your view controller
let nav = UINavigationController()
nav.viewControlles = [myView]

然后在您需要的任何地方,您应该按导航视图。

答案 4 :(得分:0)

let rightBarButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(dismissVC))
self.navigationItem.rightBarButtonItem = rightBarButton