@IBInspectable, @IBDesignable ์์๋ณด๊ณ ์ฌ์ฉํ๊ธฐ
- UIButton ์ปค์คํ ํ๊ธฐ, UITextField ์ปค์คํ ํ๊ธฐ
- UIButton ํ ๋๋ฆฌ ๋ง๋ค๊ธฐ
- UITextField์ ์ด๋ฏธ์ง ์ถ๊ฐํ๊ธฐ
๐ก1. IB ?
@IBOutlet, @IBAction, @IBInspectable, @IBDesignable์ ๊ฐ์ด IB๋ก ์์ํ๋ Attribute๋ค์ด ์์ต๋๋ค.
Xcode์์ IB๋ Interface Builder๋ฅผ ์๋ฏธํ๊ณ ์คํ ๋ฆฌ๋ณด๋(Storyboard)๋ฅผ ๋งํฉ๋๋ค.
๋ฐ๋ผ์, ์คํ ๋ฆฌ๋ณด๋์ ์ฝ๋๋ฅผ ์ฐ๊ฒฐ์ํฌ ๋, ์ฐ๋ฆฌ๋ IB๋ก ์์ํ๋ Attribute๋ค์ ์ฌ์ฉํฉ๋๋ค.
์ด ์น๊ตฌ๋ค์ ์ฌ์ฉํ์ฌ ์คํ ๋ฆฌ๋ณด๋์์ ์ค์๊ฐ์ผ๋ก ๋๋๋ง ํด๋ด ์๋ค.๐
๐ก2. @IBInspectable ?
@IBInspectable์ ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด, Inspector + Able ์ธ์คํํฐ์์ ๊ฐ๋ฅํ๋ค~๋ผ๋ ๋ป์ผ๋ก
์ฝ๋์ ์คํ ๋ฆฌ๋ณด๋์ ์ธ์คํํฐ ์์ญ์ ์ด์ด์ฃผ๋ ๊ธฐ๋ฅ์ ํฉ๋๋ค.
๊ธฐ์กด์ ์ฝ๋๋ก ์์ฑํด์ผ ํ๋ ์์ฑ(Attribute)๋ค์ ์คํ ๋ฆฌ๋ณด๋์์ ์ถ๊ฐํ๊ณ ํ๋กํผํฐ์ ๊ฐ์ ์ฝ๊ฒ ๋ณ๊ฒฝ ๊ฐ๋ฅํฉ๋๋ค.
UIButton๋ฅผ ์๋ฅผ ๋ค๋ฉด, ์๋ ๋ฒํผ์ ์ปค์คํ ํ ๋, ์๋์ ๊ฐ์ด ์์ฑํ์์์~
customBtn.layer.borderColor = UIColor.black.cgColor
customBtn.layer.borderWidth = 1
customBtn.layer.cornerRadius = 10
์ด์ ์ด ์ฝ๋ ์์ฑ ์์ด ์คํ ๋ฆฌ๋ณด๋๋ก ์ปค์คํ ๊ฐ๋ฅํฉ๋๋ค. WOW~
๐ก3. @IBDesignable ?
์ @IBInspectable์ ์ฌ์ฉํ์ฌ ์์ฑ๋ค์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ์ง๋ง, ๋น๋ ์ ๊น์ง ์ค์ ๋ชจ์ต ํ์ธ ๋ถ๊ฐ!!!!!๐ญ
๋ฐ๋ผ์, ์ฐ๋ฆฌ๋ @IBDesignable์ ์ฌ์ฉํฉ๋๋ค.๐๐ป
์คํ ๋ฆฌ๋ณด๋์์ ์์ฑํ ๊ฐ์ฒด(์ปดํฌ๋ํธ)์ ์์ค์ฝ๋๋ฅผ ์ฐ๊ฒฐํ์ฌ ํด๋น ๊ฐ์ฒด์ ํ์ฌ ์์ฑ์ ์คํ ๋ฆฌ๋ณด๋์ ์ค์๊ฐ ๋ฐ์ํ์ฌ ๋ทฐ๋ฅผ ๊ทธ๋ ค์ค๋๋ค. @IBDesignable ํด๋์ค๋ก ์ฐ๊ฒฐํ๋ฉด ์คํํ์ง ์๊ณ ๋ ๋ทฐ๋ฅผ ์ ์ํ ๋ชจ์ต ๊ทธ๋๋ก ์ค์๊ฐ ๋๋๋งํ์ฌ ์คํ ๋ฆฌ๋ณด๋์์ ํ์ธํ ์ ์์ต๋๋ค.
@IBDesignable๋ฅผ ํด๋์ค ์๋จ์ ์ ์์ผ๋ก์จ ์ด ํด๋์ค๋ StoryBoard์ ์ํ๋ฐ๋ฅผ ๋ง๋ค์ด ์ฃผ๋ ํด๋์ค์์ Xcode์ ์๋ ค์ค๋๋ค.
๐ก HOW TO USE 1 ? - 1. UIButton ์ปค์คํ ํ๊ธฐ
1) @IBInspectable, @IBDesignable ์์ฑ ์์ฑ
๋จผ์ , ๋ฒํผ๊ณผ ์ฐ๊ฒฐํ UIButton์ ์์๋ฐ๋ ํด๋์ค๋ฅผ ํ๋ ์์ฑํฉ๋๋ค.
ํด๋์ค ์์๋ @IBDesignable ์ ์ธํ์ฌ ์ค์๊ฐ ๋๋๋ง์ด ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
ํด๋์ค ์์๋ ์ถ๊ฐํ๊ณ ์ถ์ ์์ฑ๋ค์ @IBInspectable ์ ์ด์ฉํด ์ธ์คํํฐ ์์ญ์ ์ถ๊ฐํ๊ณ ์ถ์ Attribute ๋ณ์๋ฅผ ์ ์ํด์ค๋๋ค.
import UIKit
@IBDesignable
class MyInspector: UIButton {
@IBInspectable var borderColor: UIColor{
set {
self.layer.borderColor = newValue.cgColor
}
get {
let color = self.layer.borderColor ?? UIColor.clear.cgColor
return UIColor(cgColor: color)
}
}
@IBInspectable var borderWidth: CGFloat{
set {
self.layer.borderWidth = newValue
}
get {
return self.layer.borderWidth
}
}
@IBInspectable var cornerRadius: CGFloat{
set {
self.layer.cornerRadius = newValue
}
get {
return self.layer.cornerRadius
}
}
}
2) ํด๋์ค ์ฐ๊ฒฐ
์์ด๋ดํฐํฐ ์ธ์คํํฐ๋ทฐ์์ ์ปค์คํ ํ ๋ฒํผ๊ณผ ์์ฑํ ํด๋์ค๋ฅผ ์ฐ๊ฒฐ์์ผ์ค๋๋ค!!
3)lnspector Area ํ์ธ
์ง ~ ์ฐ๊ฒฐ ํ ์คํ ๋ฆฌ๋ณด๋์ ์ธ์คํฉํฐ ์์ญ์ ํ์ธํ๋ฉด ์ฝ๋๋ก ์ถ๊ฐํ ์์ฑ๋ค์ด ๋ํ๋ ์์ต๋๋ค.
ํ๋ฒ ์์ฑ์ ๋ณ๊ฒฝํ์ฌ ๋น๋ํ๋ฉด, ์ ์ ์ฉ๋์์์ ์ ์ ์์ต๋๋ค!๐๐ป
๐ก HOW TO USE ? - 2. UITextField ์ปค์คํ ํ๊ธฐ
1) @IBInspectable, @IBDesignable ์์ฑ ์์ฑ
๋จผ์ ์ฝ์ฝ์ ํฐ์น ํด๋์ค๋ก UITextField๋ฅผ ์์๋ฐ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
ํด๋์ค ์์๋ @IBDesignable ์ ์ธํ์ฌ ์ค์๊ฐ ๋๋๋ง์ด ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
ํด๋์ค ์์๋ ์ถ๊ฐํ๊ณ ์ถ์ ์์ฑ๋ค์ @IBInspectable ์ ์ด์ฉํด ์ธ์คํํฐ ์์ญ์ ์ถ๊ฐํ๊ณ ์ถ์ Attribute ๋ณ์๋ฅผ ์ ์ํด์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ didSet์์ ๊ฐ์ ์ค์ ํ ์ ์๋๋ก ํด์ค๋๋ค.
@IBDesignable
class DesignableUITextField: UITextField {
// Provides left padding for images
override func leftViewRect(forBounds bounds: CGRect) -> CGRect {
var textRect = super.leftViewRect(forBounds: bounds)
textRect.origin.x += leftPadding
return textRect
}
@IBInspectable var leftImage: UIImage? {
didSet {
updateView()
}
}
@IBInspectable var leftPadding: CGFloat = 0
@IBInspectable var color: UIColor = UIColor.lightGray {
didSet {
updateView()
}
}
func updateView() {
if let image = leftImage {
leftViewMode = UITextField.ViewMode.always
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
imageView.contentMode = .scaleAspectFit
imageView.image = image
imageView.tintColor = color
leftView = imageView
} else {
leftViewMode = UITextField.ViewMode.never
leftView = nil
}
// Placeholder text color
attributedPlaceholder = NSAttributedString(string: placeholder != nil ? placeholder! : "", attributes:[NSAttributedString.Key.foregroundColor: color])
}
}
2) ํด๋์ค ์ฐ๊ฒฐ
์์ด๋ดํฐํฐ ์ธ์คํํฐ๋ทฐ์์ ์ปค์คํ ํ ํ ์คํธํ๋์ ์์ฑํ ํด๋์ค๋ฅผ ์ฐ๊ฒฐ์์ผ์ค๋๋ค!!
3)lnspector Area ํ์ธ
์ง์!! ์ง ~ ์ฐ๊ฒฐ ํ ์คํ ๋ฆฌ๋ณด๋์ ์ธ์คํฉํฐ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ํ์ธํ๋ฉด ์ถ๊ฐํ ์์ฑ๋ค์ด ๋ํ๋ ์์ต๋๋ค.
ํ๋ฒ ์์ฑ์ ๋ณ๊ฒฝํ์ฌ ๋น๋ํ๋ฉด, ์ ์ ์ฉ๋์์์ ์ ์ ์์ต๋๋ค!