2016-05-12 18 views
1

ich eine Klasse Kategorie in Objective C erstellt haben:Objective C-Klasse Kategorie in Interface Builder

#import <UIKit/UIKit.h> 

@interface UIView (LayerProperties) 

@property IBInspectable (nonatomic) CGFloat cornerRadius; 
@property IBInspectable (nonatomic) CGFloat borderWidth; 
@property IBInspectable (nonatomic, strong) UIColor *borderColour; 

@end 

Das ist alles gut und funktioniert, wenn ich den Header importieren. Wie kann ich diese Kategorie beim Erstellen einer UIView in Interface Builder anzeigen?

Antwort

1

ich stumm wurde. Alles, was falsch ist, ist, dass ich das IBInspectable Makro an der falschen Stelle in meiner Eigenschaft Definition gesetzt haben:

@property IBInspectable (nonatomic) CGFloat cornerRadius; 

Sollte sein:

@property (nonatomic) IBInspectable CGFloat cornerRadius; 

könnte Dumme Fehler helfen, jemand anderes etwas Zeit zu sparen. Jetzt zeigen alle Eigenschaften auf allen Ansichten (und Ansicht Subklassen):

enter image description here

0

Sie müssen eine Sicht ableiten, wo Sie diese Kategorie importieren sollten. Und dann ändern Sie Ihre Storyboard-Ansicht mit dieser untergeordneten Ansicht, alle Eigenschaften aus Ihrer Kategorie sollten dann verfügbar sein.

Für z.B.

#import "LayerProperties+UIView.h" 
@interface MyCustomView : UIView 
@end 

Jetzt in IB, Ansichtsklasse zu MyCustomView ändern.

+0

Dank Hemang, ich möchte diese Eigenschaften an die bestehende UIView Klasse ohne Subclassing anzuwenden, so dass bestehende UIViews im Interface Builder/Storyboards zeigen mit den zusätzlichen Eigenschaften. Ist das möglich ohne Unterklassen? –

2

Versuchen Sie dies. KVC im Schnittstellen-Generator. Vielleicht brauchen Sie

enter image description here

oder erstellen Sie Unterklasse Unterklasse und verwenden IBInspectable/IBDesignable (http://nshipster.com/ibinspectable-ibdesignable/)

+0

Danke Sudir, ich benutze IBInspectable, aber ich möchte diese Eigenschaften auf die vorhandene UIView-Klasse ohne Unterklassen anwenden, so dass vorhandene UIViews in Interface Builder/Storyboards mit den zusätzlichen Eigenschaften angezeigt werden. Ist das möglich ohne Unterklassen? –

+0

Sie können dies überprüfen ** Weitere Advanced Uses ** Abschnitt in diesem Link für Details http://www.ios-blog.co.uk/tutorials/objective-c/user-defined-runtime-attributes/ – Sudhir

+0

Aber musst du das für jede Klasse richtig machen? Was, wenn ich eine zusätzliche Eigenschaft hinzufügen möchte? Ich muss es dann jeder Klasse hinzufügen. – Hemang