子类化

作者: coderhlt | 来源:发表于2017-07-17 10:16 被阅读33次
  • 子类化处理
   UIButton *btn=[[UIButton alloc]init];
   [btn setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal];
   [btn setTitleColor:[UIColor redColor] forState:UIControlStateSelected];

比如说以上样式的按钮,在我们工程里全世界都使用的到,最笨的方式就是复制粘贴。你可能会想到怎么让这样的按钮于生俱来都是这样?其实很简单,我们只需要新建一个自定义类继承于,UIButton,在初始化的过程做这些操作。

@implementation TitleButton
  - (instancetype)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
        self.titleLabel.font = [UIFont systemFontOfSize:16];
        [self setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal];
        [self setTitleColor:[UIColor redColor] forState:UIControlStateSelected];
    }
    return self;
}

以上过程就是子类化过程,其实就是一种继承和封装,可以让更优雅的实现效果·,也降低了耦合性。

  • 第三方框架子类化
    自定义刷新框架一:
    @interface HLTHeader : MJRefreshNormalHeader
    @end
 @implementation HLTRefeshHeader
  - (instancetype)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
      self.stateLabel.textColor=[UIColor redColor];
        self.stateLabel.font=[UIFont systemFontOfSize:14];
        self.lastUpdatedTimeLabel.hidden=YES;
        [self setTitle:@"赶紧下拉刷新" forState:MJRefreshStateIdle];
        [self setTitle:@"松开向上刷新" forState:MJRefreshStatePulling];
        [self setTitle:@"正在拼命刷新" forState:MJRefreshStateWillRefresh];
    }
    return self;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.sectionHeaderHeight=0;
    MJRefreshHeader *header=[HLTRefeshHeader headerWithRefreshingTarget:self refreshingAction:@selector(refreshdata)];
    self.tableView.mj_header=header;
}

自定义刷新框架二:
@interface HLTHeader : MJRefreshHeader
@end

@implementation HLTHeader
  - (instancetype)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
   UISwitch *s=[[UISwitch alloc]init];
        [self addSubview:s];
        self.s=s;
        UIImageView *logo=[[UIImageView alloc]initWithImage:[UIImage  imageNamed:@"header_cry_icon"]];
        logo.backgroundColor=[UIColor yellowColor];
        [self addSubview:logo];
        self.imageview=logo;
    }
    return self;
}
- (void)layoutSubviews{
    [super layoutSubviews];
    self.s.center=CGPointMake(self.frame.size.width/2, self.frame.size.height/2);
    self.imageview.frame=CGRectMake(self.frame.size.width/2, -0.5*self.frame.size.height, 100, 20);
}
- (void)setState:(MJRefreshState)state{
    [super setState:state];
    if (state==MJRefreshStateIdle) {
        [self.s setOn:NO animated:YES];
    }else if (state==MJRefreshStatePulling){
        [self.s setOn:YES animated:YES];
    }else if (state==MJRefreshStateRefreshing){
        self.s.hidden=YES;
    }
}
- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.sectionHeaderHeight=0;
    MJRefreshHeader *header=[HLTHeader headerWithRefreshingTarget:self refreshingAction:@selector(refreshdata)];
    self.tableView.mj_header=header;
}

子类化AFN:
@interface HLTsessionManger : AFHTTPSessionManager
@end

@implementation HLTsessionManger
- (instancetype)initWithBaseURL:(NSURL *)url sessionConfiguration:(NSURLSessionConfiguration *)configuration{
//添加请求头
    if (self=[super initWithBaseURL:url sessionConfiguration:configuration]) {
        [self.requestSerializer setValue:[UIDevice currentDevice].model  forHTTPHeaderField:@"Phone"];
        [self.requestSerializer setValue:[UIDevice currentDevice].systemVersion forHTTPHeaderField:@"OS"];
    }
    return self;
}
- (void)loadData
{
    AFHTTPSessionManager *mgr = [HLTsessionManger manager];
    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
    parameters[@"a"] = @"square";
    parameters[@"c"] = @"topic";
    // 3.发送请求
    [mgr GET:@"http://api.budejie.com/api/api_open.php" parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *  _Nullable responseObject) {

        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
    }];
    ```

相关文章

  • 子类化QWidget使用样式表设置影响子控件解决方法

    子类化QWidget使用样式表设置影响子控件解决方法,win+Qt5.7.1:使用子类化QWidget时,直接th...

  • 类化

    第一节 楔子 我们用不着教孩子在每种可能遇到的刺激环境下做出合适的反应。我们训练他们某种情况或多种情况做出反应后,...

  • 类化

    对某一刺激反应的连接一旦建立后,与该制约刺激相类似的其他刺激,虽未经特别的练习,亦能引起个体的制约反应,相同,对某...

  • 类化

    影响力类化的因素,主要分为 :1训练情境和试验情境间的类似,2 训练程度的高低 3类化与工作难度4 试验...

  • 2018-10-13

    700--720页读书分享,主要内容是类化在学校方面的正用,影响类化的因素,类化的误用及有效应用类化的要点。 学校...

  • 儿童行为的塑造与矫正

    类化是非常重要的学习能力,好的类化有举一反三,闻一知十的效果,不好的类化容易断章取义,甚至造成心灵的创伤。类化...

  • 实现不可变类如何禁止子类化?

    实现不可变类时要求禁止子类化。本文先讲禁止子类化的方式,最后解释为什么要禁止子类化。 JDK版本:oracle j...

  • 类化复习

  • 子类化

    子类化处理 比如说以上样式的按钮,在我们工程里全世界都使用的到,最笨的方式就是复制粘贴。你可能会想到怎么让这样的按...

  • 第十六章 类化 复习

    举一反三现象在心理学上称为类化。类化可以使人类的学习事半功倍,也可能陷入类化的陷阱而产生问题。 杯弓蛇影,一朝被蛇...

网友评论

    本文标题:子类化

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