         return self.style(for: state).shadow?.shadowColor as? UIColor
     }
     
+    // Init with default style
     public convenience init() {
         self.init(style: TextStyle())
     }
     
+    // Init with a TextStyle. This copies the TextStyle.
     public required init(style: TextStyle, frame: CGRect = .zero) {
         super.init(frame: frame)
         self.setStyle(style, for: .normal)

        // Set the attributed string
        self.setAttributedTitle(title == nil ? nil : style.attributedString(with: title!), for: state)
        
        if state == .normal{
            for (otherState, styleDelegate) in self.styleDelegates{
                if(otherState != state){

    // Delegates for the different control states
    fileprivate var styleDelegates = [UIControlState: TextButtonTextStyleDelegate]()
    
    // Set a style for a state. This copies the TextStyle.
    open func setStyle(_ style: TextStyle, for state: UIControlState) {
        
        // Copy any incoming style. This will make it so changes aren't made outside of here
        let style = TextStyle(with: style)
        
        // See if there's existing text for this state. It's stored in the style delegate.
