2014-12-25 3 views
2

Я пытаюсь создать функцию Borders Button в Swift, чтобы помочь стилю моего интерфейса. Однако любые значения RGB, которые я передаю/инициализируют, только создают белые границы.Функция UIButton Borders только возвращает белые границы

Вот моя функция:

func buttonsWithBorders(button: UIButton, borderWidth: CGFloat, redcolour: CGFloat , greencolour: CGFloat, bluecolour: CGFloat, alpha: CGFloat?) { 

let redcolour : CGFloat = 7.0 
var greencolour : CGFloat = 3.0 
var bluecolour : CGFloat = 2.0 
var alpha: CGFloat = 1.0 
var widthOfBorder: CGFloat = borderWidth 
var theButtonWithBorders: UIButton 

var buttonBorderColour : UIColor = UIColor(red: redcolour, green: greencolour, blue: bluecolour, alpha: alpha) 

button.layer.borderWidth = widthOfBorder 
return button.layer.borderColor = buttonBorderColour.CGColor 
} 

И я называю это с помощью:

buttonsWithBorders(learnHomeButton, 2.0,2.0, 5.0, 5.0, 1.0)

Также я знаю, что передача значений и инициализирует их неверно, но Xcode complaines, что я не инициализация перед использованием в противном случае

Любая помощь будет очень признательна, Cheers

ответ

1

Вы не инициализируете их. Вы объявляете полностью новыми переменными с теми же именами, что и параметры, которые вы передаете. Всякий раз, когда вы используете let или var, вы вводите совершенно новую переменную.

Когда новая переменная вводится с тем же именем, что и в настоящее время в области видимости, это называется variable shadowing, и то, что вы здесь, представляет собой почти учебник.

Лучше, более краткая реализация вашей функции может выглядеть следующим образом:

func addButtonBorder(button: UIButton, width: CGFloat, red: CGFloat, blue: CGFloat, green: CGFloat, alpha: CGFloat = 1.0) { 
    button.layer.borderColor = UIColor(red: red, green: green, blue: blue, alpha: alpha).CGColor 
    button.layer.borderWidth = width 
} 

Я использовал другое имя, потому что buttonsWithBorders означает, что одна или несколько кнопок будут возвращены из этой функции. Это не кажется вашим намерением. Поскольку вы пропускаете одну кнопку, вы можете получить ее только, но «кнопки» подразумевают более одного.

Если бы я собирался инициализировать много кнопок с границами, я мог бы сделать что-то вроде этого:

extension UIButton { 
    convenience init(frame: CGRect, borderColor: UIColor, borderWidth: CGFloat = 1.0) { 
     self.init(frame: frame) 
     setBorder(borderColor, borderWidth: borderWidth) 
    } 
    func setBorder(borderColor: UIColor, borderWidth: CGFloat = 1.0) { 
     layer.borderWidth = borderWidth 
     layer.borderColor = borderColor.CGColor 
    } 
} 

Тогда можно сказать, что UIButton(frame: frame, borderColor: borderColor, borderWidth: 2.0) инициализировать новую кнопку или button.setBorder(borderColor, borderWidth: 2.0), чтобы установить границу на существующем кнопка.

0

цвета значение должно находиться в диапазоне от 0,0 до 1,0, так что вы должны определить их как:

let redcolour : CGFloat = 7.0/255.0 
var greencolour : CGFloat = 3.0/255.0 
var bluecolour : CGFloat = 2.0/255.0 
+0

Хорошо, что заставляет меня упасть глупо. Спасибо. – user2176152

0

UIColor принимает поплавок между 0 и 1. Таким образом, вы хотите разделить ваш RGB значение от 255,0

Вот код, который я использовал, который работает на детской площадке:

Фонд импорта

импорта UIKit

функ buttonsWithBorders (кнопка: UIButton, BorderWidth: CGFloat, redcolour: CGFloat, greencolour: CGFloat, bluecolour: CGFloat, альфа: CGFloat) {

let buttonBorderColour : UIColor = UIColor(red: redcolour, green: greencolour, blue: bluecolour, alpha: alpha) 

button.layer.borderWidth = borderWidth 
return button.layer.borderColor = buttonBorderColour.CGColor 

}

пусть learnHomeButton = UIButton (рама: CGRect (х: 0, у 0, ширина: 50, высота: 50))

buttonsWithBorders (learnHomeButton, 2,0, 177/255,0, 177/255.0, 177/255.0, 1,0)

Я отредактировал код, чтобы вы могли передать цвета функции в качестве параметров. Надеюсь, поможет.

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