У меня есть приложение Swift, которое перемещается по многим контроллерам представлений, все с похожим внешним видом. В каждом контроллере представления есть кнопки, для которых я НЕ создал свойства IBOutlet (все они просто запускают переходы через Interface Builder).

Есть ли простой способ изменить цвет фона или цвет текста всех кнопок в приложении, не меняя его для каждой кнопки в IB или не создавая IBOutlet для каждой кнопки?

6
Maxpower 24 Фев 2015 в 20:12

2 ответа

Лучший ответ

Вот основные шаги, которые упростят ситуацию, в вашем случае это придется повторить для каждого viewController.

  1. Создайте одну розетку для всех ваших кнопок:

    @IBOutlet var myButtons: [UIButton]!
    
  2. Соедините (перетащите) эту розетку с каждой из кнопок на виде. Нажмите на каждую из кнопок в вашем интерфейсе и проверьте «Ссылка на коллекции торговых точек», находящиеся в connections inspector (последняя кнопка со стрелкой в ​​круге). Обратите внимание, что все они должны быть связаны с myButtons.

  3. Создайте для кнопок стиль цикла for:

    for button in self.myButtons {
        button.backgroundColor = UIColor.clearColor()
        button.layer.borderWidth = 1
        button.layer.borderColor = UIColor.greenColor().CGColor
    }
    

Чтобы сделать это рабочее приложение широким, вам нужно изучить несколько вариантов. Вы можете использовать константы, поэтому, по крайней мере, когда вы хотите изменить стиль, вам нужно изменить только один файл: Константы в Objective-C , Файл глобальных констант в Swift.

В качестве альтернативы есть несколько способов сделать функцию общедоступной. Я попытаюсь получить пример кода, но класс с именем buttonStyle может быть важен для каждого viewController и вызываться в цикле for: [buttonStyle styleButton:button]. Функция styleButton устанавливает стиль (я ничего для этого не тестировал).

Ознакомьтесь с этим ответом @zisoft: Как пройти через выходы UIViewController с помощью Swift, это более подробный журнал !.

9
Community 23 Май 2017 в 10:32

Перейдите в свой appDelegate и измените (это изменит только цвет текста):

let buttonAppearance = UIButton.appearance()
    buttonAppearance.tintColor = UIColor(red: 1.0, green:1.0, blue:1.0, alpha:1.0)

Это будет определять цвет текста, который требуется для всех ваших кнопок. Вы можете сделать то же самое для navigationBar, tabBar и т. Д.

1
Labria 23 Июн 2017 в 14:46