2016-06-22 80 views
5

Sto creando una classe personalizzata per UIButton per aumentare l'area di tocco. Ho bisogno che quell'utente possa inserire il padding nello storyboard stesso. Quindi creo una proprietà IBInspectable.IBInseguibile UIEdgeInsets non mostrato in IBOutlet

@IBDesignable class UIIconButton: UIButton { 
    @IBInspectable var touchPadding:UIEdgeInsets = UIEdgeInsetsZero 
} 

Ma non è mostrato nello storyboard. Tuttavia se si sostituisce lo stesso con CGRect allora è visibile nello storyboard.

risposta

15

A partire da Xcode 7, Interface Builder non capisce UIEdgeInsetsZero come @IBInspectable (bummer!).

È possibile ovviare a questo, però, utilizzando CGFloat proprietà per impostare inserti bordo indirettamente:

public class UIIconButton: UIButton { 

    @IBInspectable public var bottomInset: CGFloat { 
    get { return touchPadding.bottom } 
    set { touchPadding.bottom = newValue } 
    } 
    @IBInspectable public var leftInset: CGFloat { 
    get { return touchPadding.left } 
    set { touchPadding.left = newValue } 
    } 
    @IBInspectable public var rightInset: CGFloat { 
    get { return touchPadding.right } 
    set { touchPadding.right = newValue } 
    } 
    @IBInspectable public var topInset: CGFloat { 
    get { return touchPadding.top } 
    set { touchPadding.top = newValue } 
    } 

    public var touchPadding = UIEdgeInsetsZero  
} 

Questo mostrerà correttamente il bottomInset, leftInset, ecc all'interno di Interface Builder.

+0

Mi ci sono voluti un paio d'ore per arrivare a questa soluzione. – Urban