2017-01-30 28 views
0

Я ударил по дороге, пытаясь изменить кнопку панели инструментов типа UIBarButtonItem во время выполнения.Изменить кнопку панели инструментов

Я создал программно панель инструментов для данного текстового представления, и я хочу изменить изображение кнопки при ее нажатии, например, если он имеет переключатель на изображении и переключает его.

поясню:

Здесь я создаю панель с нужными кнопками

func configureToolbar(forTextView textView: UITextView) { 

    toolbar?.barStyle = UIBarStyle.default 
    toolbar?.items = [ 
     UIBarButtonItem.init(image: UIImage.init(named: "bold_unselected"), style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.didTapBold(sender:))), 
     UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil), 
     UIBarButtonItem(title: "Italic", style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.didTapItalic(sender:))), 
     UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil), 
     UIBarButtonItem(title: "Underline", style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.dismissKB))] 
    toolbar?.sizeToFit() 

    for (index,item) in (toolbar?.items?.enumerated())! { 
     item.tag = index 
    } 

    // Adds a view as a upper border line 
    let border = UIView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 0.5)) 
    border.backgroundColor = UIColor.lightGray 
    toolbar?.addSubview(border) 

    // Configures the toolbar 
    toolbar?.backgroundColor = UIColor.white 
    toolbar?.barTintColor = UIColor.white 
    toolbar?.tintColor = UIColor.black 
    toolbar?.clipsToBounds = true 

    // Adds to the super view; 
    textView.inputAccessoryView = toolbar 
} 

Вот смелое функция кнопки

func didTapBold(sender: UIBarButtonItem) { 

    typeface.isBold = typeface.isBold! ? false : true // true -> false -> true 
    toggleButton(button: sender, status: typeface.isBold!) 
} 

Вот где я хочу для изменения кнопки «статус» ВКЛ - ВЫКЛ

func toggleButton(button: UIBarButtonItem, status: Bool) { 
    // changes the button appearance 
    switch button.tag { 
    case 0: 
     print("bold") 
     print("status \(status)") 
     if status { 
      button.image = UIImage.init(named: "bold_selected") 
     } else { 
      button.image = UIImage.init(named: "bold_unselected") 
     } 

    case 2: 
     print("bla bla bla") 

    case 4: 
     print("bla bla bla 2") 

    default: 
     print("default value called") 
    } 
} 

По некоторым причинам, я не могу изменить изображение на тот, что я хочу, но я могу изменить на другой.

Я прочитал Руководства по интерфейсу человека и не могу найти, какие рекомендуемые размеры изображения на панели инструментов, но после поиска, который я прочитал на некоторых веб-сайтах размером 20x20, может кто-то подтвердить это?

Есть изображение по умолчанию и выбранное.

unselected

selected

UPDATE Почему-то кажется, что я не могу добавить любой цветной значок/изображения на панели инструментов. Просто попытался добавить другой значок, и он просто появился как черная точка.

+0

Btw, мои изображениям/иконкам 64x64 Я не знаю, если это вызывает проблему, я действительно так не думаю –

+0

Кто-нибудь поможет? :) –

ответ

0

Итак, я нашел решение, которое довольно простое, но найти его было нелегко.

Если вы хотите добавить цветные значки/изображения на панель инструментов, при добавлении изображения не забудьте установить свойство режима рендеринга всегда оригинальным.

Se исправленного кода должен теперь быть:

//when setting the toolbar icons 
toolbar?.items = [UIBarButtonItem.init(image: UIImage.init(named: "bold_unselected")?.withRenderingMode(.alwaysOriginal), style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.didTapBold(sender:)))] 

Или экземпляр изображения в

let img = UIImage(named: "image").withRenderingMode(.alwaysOriginal) 
let barBtnItm = UIBarButtonItem.init(image: img, style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.didTapBold(sender:))) 

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