In my app, I heavily depend on different view types and they will hold different values. For example, for a button I will need it to have 4 additional variables and I implemented it like this:
import UIKit
class ActionButton: UIButton {
var row = 0
var action = 0
var appDataId = ""
var companyId = ""
}
And I use a ActionButton instead of UIButton.
However I will need a lot of these for different types of views like labels buttons etc and it might complicate the project.
My question is, is that a good practice? Is there any other way to achieve same result ?
Thanks!
METHOD 0: What you already showed us works fine :D
Thats is: subclassing an existing Class and customising it with your vars. You will just have to copy paste that button or set the class of newly created buttons to ActionButton
.
But there are more interesting solutions in my opinion.
METHOD 1: Create a UIButton extension and use Associated Objects in place of stored vars.
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Extensions.html
There is also an alternate way:
Extensions May not contain Stored properties
METHOD 1.5 (RECOMMENDED SOLUTION):
Make an extension of UIView
. UILabel and UIButton as well as many other UI elements inherit from it. What you put in your UIView
extension will be accessible to all classes that inherit from UIView
.
BONUS METHOD (if you want or need to go a step further): Create a custom UIButton Class and use IBInspectables !
You will then be able to modify the vars directly from the Interface builder which is very handy for testing !
Example:
//
// CustomButton.swift
import UIKit
@IBDesignable
class CustomButton: UIButton {
@IBInspectable var cornerRadius: CGFloat = 3.0 {
didSet {
setupView()
}
}
@IBInspectable var fontColor: UIColor = UIColor.whiteColor() {
didSet {
self.tintColor = fontColor
}
}
override func awakeFromNib() {
setupView()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setupView()
}
func setupView() {
self.layer.cornerRadius = cornerRadius
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With