2013-09-26 17 views
2

В моем приложении я разработал представление в построителе интерфейса.
Эта точка зрения имеет панель инструментов, с некоторыми UIBarButtonItem в.Добавить границу в 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]; 

Но это не работает. У кого-нибудь есть решение?

+0

Вашего cancelBorder может быть вне пределов вашего BackButton. Вы сказали, что ваш backButton имеет ширину 12, а ваш cancelBorder имеет x-смещение 12. Таким образом, cancelBorder начинается за пределами вашего backButton, и поэтому не будет видимым (предполагается, что кнопка имеет clipToBounds = YES, что я думаю, что есть). Возможно, попробуйте со смещением 8 или что-то еще и посмотрите, видно ли это. Для того, чтобы быть на краю, тогда это должно быть смещение 11. –

ответ

7

Добавление 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

это не работает – vboombatz

1

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 
} 

Надеется, что это помогает

Смежные вопросы