扩展UIView并在iOS中添加属性

 UNESCO媒介与女性教席走_890 发布于 2023-02-12 21:46

我想向UIView添加一个属性.我知道我可以继承一个UIView但是因为我想添加一个属性我想要扩展它.

我试着这样:

@interface UIView (Util)
@property(nonatomic, assign) BOOL isShow;
@end

@implementation UIView (Util)
@dynamic isShow;

-(void)setIsShow:(BOOL)isShow{
    self.isShow = isShow;
}
@end

但它不起作用.它引发了一个例外:Thread 1: EXC_BAD_ACCESS(code=2,address,...)

1 个回答
  • 如果要在类别中添加新属性,则必须使用objc_setAssociatedObjectobjc_getAssociatedObject.

    例:

    NSString *const IS_SHOW_KEY = @"IS_SHOW";
    
    @interface UIView (Util)
    @property (nonatomic) BOOL isShow;
    @end
    
    @implementation UIView (Util)
    
    - (void)setIsShow:(BOOL)isShow {
        NSNumber *val = @(isShow);
        objc_setAssociatedObject(self, (__bridge const void*)(IS_SHOW_KEY), val, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    
    - (BOOL)isShow {
        NSNumber *val = objc_getAssociatedObject(self, (__bridge const void*)IS_SHOW_KEY);
        return [val boolValue];
    }
    
    @end
    

    请参阅此处的运行时参考文档:https://developer.apple.com/library/ios/documentation/cocoa/reference/ObjCRuntimeRef/Reference/reference.html

    2023-02-12 21:54 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有