Я пытаюсь дать всем своим взглядам новое свойство под названием newProperty
. Поскольку все взгляды имели бы это, было бы разумнее добавить его в суперкласс. В этом случае я хочу добавить newProperty
в UIView
, так что все подклассы UIView
(UIWindow
, UIPickerView
, UITabBar
и т. Д.) Наследуют его. Так это возможно?Добавление свойства в суперкласс UIView
ответ
Когда свойство необходимо подкладочный переменную экземпляра, можно использовать соответствующий объект:
How do I use objc_setAssociatedObject/objc_getAssociatedObject inside an object?
What is objc_setAssociatedObject() and in what cases should it be used?
http://darkdust.net/writings/objective-c/attaching-objects
... но вы можете думать, что это через прежде чем использовать его.
Если ваше свойство не требует переменной экземпляра, см. Ответ Луки.
Напишите категорию на UIView.
В Xcode, перейдите Файл -> Создать -> Файл, а затем выберите «Объектив-C Категория» из строки Cocoa Touch в разделе iOS. Убедитесь, что категория включена в UIView, дайте ей имя, и вы ушли.
Здесь вы можете добавить свойства или даже методы экземпляра, которые, при условии, что вы импортируете категорию в префиксный файл приложения, будут доступны все классы, наследующие UIView.
EDIT: Я не работал со связанными объектами. Это действительно простой пример использования предварительно определенных свойств, которые уже существуют в объекте, используя мои собственные свойства, чтобы упростить их поиск.
ОП не указал, какое свойство они хотят добавить в UIView, поэтому я сделал предположение, что категории будет достаточно. Я уверен, что все правильно с комментариями ниже re: хранилище данных по действительно настраиваемому свойству.
Я не оцениваю нисходящие потоки, когда на самом деле цель ОП не сделана настолько ясной, что касается использования их «newProperty».
например: Категория по UIView, называемая положением. (UIView + Position)
UIView+Position.h
@interface UIView (Position)
-(CGFloat)left;
-(CGFloat)right;
-(CGFloat)top;
-(CGFloat)bottom;
@property (nonatomic) CGFloat left;
@property (nonatomic) CGFloat right;
@property (nonatomic) CGFloat top;
@property (nonatomic) CGFloat bottom;
@end
UIView+Position.m
#import "UIView+Position.h"
@implementation UIView (Position)
-(CGFloat)left
{
return self.frame.origin.x;
}
-(CGFloat)right
{
return self.frame.origin.x + self.frame.size.width;
}
-(CGFloat)top
{
return self.frame.origin.y;
}
-(CGFloat)bottom
{
return self.frame.origin.y + self.frame.size.height;
}
@end
- 1. Свойства свойства UIView 0
- 2. добавление UIView в UIViewController
- 3. Добавление uiview в TableviewCell
- 4. Добавление UIViewController в UIView
- 5. Добавление uiview в uiviewcontroller
- 6. Добавление SKSpriteNode в UIView
- 7. Добавление прокладки в UIView
- 8. добавление кнопки в UIView
- 9. Добавление UICollectionView в UIView
- 10. Суперкласс/Интерфейс, обеспечивающий свойства TextAlignment и FontFamily
- 11. Категории и свойства UIView
- 12. Свойства доступа в пользовательских UIVIew
- 13. UIView отражает свойства CALayer
- 14. Как связать свойства UIView
- 15. Добавление дополнительных свойств к UIView в ObjectiveC
- 16. Добавление UILabel в центре UIView
- 17. Добавление небольшого UIView в SKScene
- 18. Добавление пользовательского UIView в UITableViewController
- 19. Xamarin - добавление салфетки в UIVIEW
- 20. Добавление UIView в UIViewController динамически
- 21. Добавление нескольких UIButtons в UIView
- 22. Добавление UINavigationBar в UIView программно?
- 23. Добавление UIView из центра родительского UIView
- 24. Добавление кнопки над UIView
- 25. Добавление UIView под экраном
- 26. Добавление UIView к UICollectionviewcell
- 27. Добавление свойства в TreeNode
- 28. Добавление свойства в ENVDTE.Project
- 29. Добавление $ свойства в Scope
- 30. iOS - Как убрать свойства UIView
Категория может добавлять методы к классу, но не к собственности. Это связано с тем, что категория не может добавить резервное хранилище/ivar для манипулятора и сеттера. –
Вы не можете добавить 'iVars'. См. Http://stackoverflow.com/q/6162589/667586 http://stackoverflow.com/a/6162619/667586 –
Это позволит вам объявить и определить методы экземпляра (включая декларации свойств), но это не разрешать хранение (например, ошибка в синтезе свойства при реализации категории). – justin