美文网首页
一个@dynaminc 引发的问题

一个@dynaminc 引发的问题

作者: uncle_bull | 来源:发表于2018-05-10 17:02 被阅读0次

今天在写UIAlertController这个控件的时候,需要实现messge的文本对齐,虽然一看就知道设置一个label的属性问题,但是系统的你没法修改,那就只用找方法了 在网上看了好多都是这样实现的

    UIView*subView1 = alert.view.subviews[0];

    UIView*subView2 = subView1.subviews[0];

    UIView*subView3 = subView2.subviews[0];

    UIView*subView4 = subView3.subviews[0];

    UIView*subView5 = subView4.subviews[0];

    //分别拿到title 和 message 可以分别设置他们的对齐属性

    UILabel*message = subView5.subviews[1];

    message.textAlignment = NSTextAlignmentLeft;

这个方法简单粗暴 

第二个方法就是添加分类  我感觉这个是最好的

@property (nonatomic, strong) UILabel *titleLabel;

@property (nonatomic, strong) UILabel *messageLabel;

- (NSArray*)alertViewArray:(UIView*)root {

    staticNSArray*_subviews =nil;

    _subviews =nil;

    for(UIView*viewinroot.subviews) {

        if(_subviews) {

            break;

        }

        if ([view isKindOfClass:[UILabel class]]) {

            _subviews = root.subviews;

            return_subviews;

        }

        [selfalertViewArray:view];

    }

    return_subviews;

}

- (UILabel*)titleLabel {

    return [self alertViewArray:self.view][0];

}

- (UILabel*)messageLabel {

    return [self alertViewArray:self.view][1];

}

但是写这个方法的时候出现会报错 property ’titleLabel' requires method 'settitleLabel:' to be defined - use @dynamic or provide a method implementation in this category

很显然这是要吗写个set方法  或者是@dynamic这个关键词,通常是用不到的 仅仅是告诉编译器这两个方法在运行期会有的,无需产生警告。 不想用他代替 也可以写set方法

例如:@dynamictitleLabel;

另外引用: @dynamic 就是要来告诉编译器,代码中用@dynamic修饰的属性,其getter和setter方法会在程序运行的时候或者用其他方式动态绑定,以便让编译器通过编译。其主要的作用就是用在NSManageObject对象的属性声明上,由于此类对象的属性一般是从Core Data的属性中生成的,Core Data框架会在程序运行的时候为此类属性生成getter和Setter方法。

它与@synthesize的区别在于:使用@synthesize,编译器会确实的产生getter和setter方法,而@dynamic仅仅是告诉编译器这两个方法在运行期会有的,无需产生警告。

假设有这么个场景,B类,C类分别继承A类,A类实现某个协议(@protocol),协议中某个属性( somePropety )我不想在A中实现,而在B类,C类中分别实现。如果A中不写任何代码,编译器就会给出警告:

“use @synthesize, @dynamic or provide a method implementation"

这时你给用@dynamic somePropety; 编译器就不会警告,同时也不会产生任何默认代码。

相关文章

  • 一个@dynaminc 引发的问题

    今天在写UIAlertController这个控件的时候,需要实现messge的文本对齐,虽然一看就知道设置一个l...

  • 一个空格引发的问题

    微信支付成功,更改订单状态本来用curl调用java接口已经调通,后来需求变成了多店支付问题,然后也因为多个环境来...

  • 一个加号引发的问题

    grails中执行sql操作的代码很简单,如下:def dataSourcedef sql = new Sql(d...

  • 一个问题引发的思考

    -01- “问你一个问题呗!” “说” “就是,人活着是为什么呢? 或者说人为什么活着?” “这个问题你马爷爷已经...

  • 一个问题引发的思考

    我上学时,问一个伙伴,你喜欢班上的那个女生?或亦反问我喜欢那个女生。可是,当我们问他们是觉得开玩笑,很好玩,可是当...

  • 一个变量引发的问题

  • 一个问题引发的“浪潮”

    1967年,美国加州一所高中。课堂上正在学习纳粹德国历史,学生史蒂夫问了一个问题:“德国民众怎么能声称对屠杀...

  • 一个问题引发的思考

    今天有朋友问我关于应试教育的看法?这个问题引发了我的思考,回答如下: 任何事物都有它的多面性,同时它的存在一定有它...

  • 一个问题引发的聊天……

    / “妈妈问你个问题,有钱没钱都不能乱花钱,你觉得这句话对不对?” “对啊。” “嗯,那为啥对?难道有钱不该随便花...

  • 中国有多安全?老外感触最深的竟是这件事……

    最近,有一个问题引发各国网友讨论,随后又“出口转内销”,引发中国网友的关注—— “中国有多安全?” 问题的答案似乎...

网友评论

      本文标题:一个@dynaminc 引发的问题

      本文链接:https://www.haomeiwen.com/subject/nzttdftx.html