我在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")
}
我可以尝试很多方法但是没有得到结果 如何在导航栏中显示节目栏按钮项目,
答案 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故事板解决方案但无法找到,所以我将展示我的解决方案。
我遇到的问题是,当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)
}
}
结果是我无法从故事板中拖动一个条形按钮项。当我尝试时,该项目将最终位于底部的标签栏中。
我发现一篇文章建议在导航控制器中嵌入第二个视图控制器,但这会增加我想避免的其他复杂程度。我找到的工作是将导航项拖动到导航栏区域,然后您可以添加一个没有问题的栏按钮项。
我知道故事板或程序化布局是否更好有很多争论。虽然我仍然是一个非常初级的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