在UIBarButtonItem中添加边框

时间:2013-09-26 16:00:39

标签: ios ios7 uibarbuttonitem uitoolbar

在我的应用中,我在界面构建器中设计了一个视图 此视图有一个工具栏,其中包含一些UIBarButtonItem。

我的按钮可以是自定义图像,也可以是分享,添加,...等默认按钮 现在使用iOS7,按钮不再具有边框。所以我想补充一些。 enter image description here

这是我想要做的:在我的屏幕截图上添加白线等边框。 我试过的是在工具栏中添加一个UIButton。在我的例子中,我设置了我的后退按钮大小(12x44)。我将此按钮添加为视图控制器的IBOutlet属性,并尝试绘制边框:

CALayer *cancelBorder = [CALayer layer];
[cancelBorder setFrame:CGRectMake(12, 0, 1, 44)];
[backBorder setBackgroundColor:[[UIColor whiteColor] CGColor]];
[backButton.layer addSublayer:cancelBorder];

但它不起作用。有人有解决方案吗?

2 个答案:

答案 0 :(得分:8)

以编程方式将UIBarButtonItem添加到工具栏可能会解决您的问题。

首先,创建带有图像,边框等的自定义按钮。正如HereTrix所说,您可以为此按钮添加边框。

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(10, 0, 30, 30);
button.layer.borderColor = [UIColor blueColor].CGColor;
button.layer.borderWidth = 1.0f;
/* any other button customization */

然后,使用该自定义按钮初始化UIBarButtonItem,并将此项添加到工具栏中。

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:button];
self.toolBar.items = @[backButton];

答案 1 :(得分:3)

Swift 3 :以下是按钮自定义和事件处理的完整实现。

Test UIBarButtonItem

override func viewDidLoad() {
    super.viewDidLoad()

    let button = UIButton.init(type: .custom)
    button.setTitle("Tester", for: .normal)
    button.setTitleColor(.darkGray, for: .normal)
    button.layer.borderWidth = 1
    button.layer.cornerRadius = 5
    button.layer.borderColor = UIColor.darkGray.cgColor
    button.addTarget(self, action: #selector(self.handleButton), for: .touchUpInside)

    self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: button)
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    if let button = self.navigationItem.rightBarButtonItem?.customView {
        button.frame = CGRect(x:0, y:0, width:80, height:34)
    }
}

func handleButton( sender : UIButton ) {
    // It would be nice is isEnabled worked...
    sender.alpha = sender.alpha == 1.0 ? 0.5 : 1.0
}

希望这有帮助