Welche Art von Objective-C-Laufzeitmagie muss ich verwenden, um sie zu einer Eigenschaft für ein Objekt zu machen, die immer auf einen Wert gesetzt wird, der nicht dem normalen Standard entspricht. Zum Beispiel ist UIImageViews userInteractionEnabled immer falsch, aber ich möchte meiner eigenen UIImageview-Unterklasse immer userInteractionEnabled auf true setzen. Ist dasselbe möglich, ohne UIImageView zu untergliedern?Wie legen Sie eine Eigenschaft einer UIKit-Klasse oder -Unterklasse für alle zukünftigen Instantianer fest?
Antwort
Erstellen Sie eine Kategorie mit einer init-Methode und/oder einem Convenience-Konstruktor, der die Eigenschaft für Sie festlegt. Bei der Festlegung von Werten im Konstruktor werden so ziemlich alle "Objektstandards" in Objective-C behandelt, und glücklicherweise können Sie mit Kategorien eine beliebige Funktionalität zu einer Klasse hinzufügen, solange keine zusätzlichen Instanzvariablen erforderlich sind.
Sie könnten eine neue Kategorie für UIImageView und eine neue initializer hinzu:
// UIImageView(CustomInitialization).h
@interface UIImageView (CustomInitialization)
- (id)customInitWithImage:(UIImage *)image;
@end
// UIImageView(CustomInitialization).m
#import "UIImageView(CustomInitialization).h"
@implementation UIImageView (CustomInitialization)
- (id)customInitWithImage:(UIImage *)image
{
if (self = [self initWithImage:image])
{
self.userInteractionEnabled = YES;
}
}
@end
Sie müssen UIImageView(CustomInitialization).h
im Code enthalten, und rufen Sie dann Ihre initializer jedes Mal, wenn Sie die Standardeigenschaften festlegen möchten:
UIImageView * iview = [[UIImageView alloc] customInitWithImage:[UIImage imageNamed:@"pic.png"]];
- 1. So legen Sie eine Eigenschaft einer Eigenschaft in NHibernate fest
- 2. Legen Sie einen Standardwert für eine Eigenschaft fest
- 3. Mocha: Wie legen Sie eine Erwartung für eine Instanzmethode fest?
- 4. So legen Sie eine Ressourceneigenschaft fest
- 5. Wie legen Sie eine rotierende Kategoriefarbe für eingehende Nachrichten fest?
- 6. Wie legen Sie mehrere Tags für eine Schaltfläche fest?
- 7. Wo legen Sie preferredDisplayMode für UISplitViewController fest?
- 8. Wie legen Sie die Ränder für eine Matplotlib-Figur fest?
- 9. Wie legen Sie Eigenschaften für eine generische Entität fest?
- 10. So legen Sie die Stückliste für eine gelesene Datei fest
- 11. Schienenbefestigungen - wie legen Sie Fremdschlüssel fest?
- 12. Legen Sie die Platzhalterzeichenfolge für NSTextView fest
- 13. So legen Sie Header für DeleteAsync fest
- 14. So legen Sie eine globale Variable fest
- 15. So legen Sie einen spezifischen Typkonverter für eine bestimmte Eigenschaft mithilfe von AutoMapper fest
- 16. Wie legen Sie eine Klassenmethode gleich mehreren Funktionen fest? - Javascript
- 17. Wie legen Sie Formularüberprüfungsregeln für CodeIgniter dynamisch fest?
- 18. So legen Sie die Sichtbarkeit für eine Aktionsleistenmenügruppe fest?
- 19. Wie legen Sie unterschiedliche Skalengrenzen für verschiedene Facetten fest?
- 20. Wie legen Sie die Annahmen/Typen für die Elemente einer Function oder IndexedBase fest?
- 21. Legen Sie die Uhrzeit für eine ZoneDateTime in java.time fest?
- 22. So legen Sie das Limit für eine Hibernate-Abfrage fest
- 23. So legen Sie das ausgewählte Objektgitter fest
- 24. So legen Sie eine Zellenposition in einer UITableView dynamisch fest
- 25. Wie legen Sie den Ergebniswert fest?
- 26. Unterklasse oder Protokoll, wie?
- 27. Wie legen Sie mehrere Standardwerte in einer MultiSelectListPreference fest?
- 28. Wie legen Sie Dateiberechtigungen für Dateien in meiner Bereitstellung fest?
- 29. Wie legen Sie eine Eigenschaft eines Elements im verschachtelten Array mit ImmutableJS Map fest?
- 30. Legen Sie die Authentifizierungsanforderung in j2me fest?
Sollte ich dies stattdessen innerhalb der Image-Eigenschaft tun? Da UIImageView ohne Bildsatz erstellt werden kann (z. B. in Interface Builder ohne Bildsatz erstellt) – Boon