如何在iOS中的导航栏中添加标准信息按钮?

时间:2016-10-10 09:36:37

标签: ios swift uinavigationbar uibarbuttonitem uinavigationitem

我想将带有系统信息图标的右侧栏按钮添加到导航栏。但我发现UIBarButtonSystemItem没有提供这种类型的按钮。另一方面,我尝试使用UIButton UIButtonType.infoLight类型,但我不允许将其分配给navigationItem.rightBarButtonItems

有没有办法做到这一点?

6 个答案:

答案 0 :(得分:14)

这可以使用UIButton

类型的.infoLight对象来实现
let infoButton = UIButton(type: .infoLight)
infoButton.addTarget(self, action: #selector(infoButtonTapped), forControlEvents: .TouchUpInside)
let barButton = UIBarButtonItem(customView: infoButton)
self.navigationItem.rightBarButtonItem = barButton

或者:

infoImage添加到Asset catalog并使用以下代码创建barButtonItem

let infoButton = UIBarButtonItem(image: UIImage(named: "infoImage"), style: .Plain, target: self, action: #selector(ViewController.infoButtonTapped))
self.navigationItem.rightBarButtonItem = infoButton 

答案 1 :(得分:4)

您可以使用自定义视图初始化UIBarButtonItem

let button = UIButton(type: .infoLight)
let barButton = UIBarButtonItem(customView: button)

答案 2 :(得分:2)

我找到了使用Interface Builder将信息图标添加到导航栏中的更简便方法。

  1. 不要将Bar Button Item添加到导航栏中
  2. 向UIView添加按钮
  3. 将按钮类型更改为“信息灯”
  4. 将按钮拖放到导航栏的右上角。这是全部了。栏按钮项将自动出现,添加的信息按钮将在栏按钮项下 (然后,对Button进行常规操作)

答案 3 :(得分:0)

将infoButton图像添加到资源中,并通过提供名称设置为barButton。

UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"infoImage.png"] style:UIBarButtonItemStyleDone target:self action:@selector(barButtonAction)];

    self.navigationItem.rightBarButtonItem = item;

在Swift中

  let item = UIBarButtonItem(image: UIImage(named: "infoImage.png"), style: .Plain, target: self, action: #selector(barButtonAction))

        self.navigationItem.rightBarButtonItem = item

答案 4 :(得分:0)

UIButton *doneBtn = [[UIButton alloc] initWithFrame...];
[doneBtn setTitle:@"Submit" forState:UIControlStateNormal];
doneBtn.titleLabel.font = [UIFont systemFontOfSize: 14.0];
[doneBtn addTarget:self action:@selector(doSubmit:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithCustomView:doneBtn];
self.navigationItem.rightBarButtonItem = rightButton;

答案 5 :(得分:0)

Swift 5.0

override func viewDidLoad() {
    super.viewDidLoad()

    let infoButton = UIButton(type: .infoLight)
    infoButton.addTarget(self, action: #selector(infoButtonTapped), for: .touchUpInside)
    navigationItem.rightBarButtonItem = UIBarButtonItem(customView: infoButton)
}

@objc func infoButtonTapped() {}