控件参数的选择

在控制器的类扩展里面 咱们会通常定义控件

1.和stroyBoard上面关联 这时候用weak去修饰
因为当咱们从storyBoard移除时就不会再有强引用,会自己释放

2.为了进行赋值   用weak 去修饰
当咱们从一个作用域到另一个作用域时,必须要通过在类扩展里面进行一次声明属性,通过赋值,进行作用域的跳转

3.控件进行懒加载 要用strong
当控件不一定被创建的时候,如果用也是频繁的使用时 
比如:
#pragma mark - 重写didSelectRow.. 这个方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    
    // 取消默认选中的状态
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    
    // 选中这个cell 会产生一些别的事件,重写了 覆盖了父类的方法
    if (indexPath.section==0) {
        
        return;
    }
    // 根据索引值去返回对应的cell
    BFSettingsCell *cell= [tableView cellForRowAtIndexPath:indexPath];
    
    [self.view addSubview: self.textField];
    
    
    [self.textField becomeFirstResponder];
    
    self.selectCell=cell;
    
}



#pragma  mark - 控件的懒加载

- (UIDatePicker *)datePicker{
    
    if (_datePicker==nil) {
        
        _datePicker=[[UIDatePicker alloc]init];
        
        // 显示模式
        _datePicker.datePickerMode=UIDatePickerModeTime;
        
        _datePicker.locale = [NSLocale localeWithLocaleIdentifier:@"zh-Hans"];
    }
    return _datePicker;
}



- (UITextField *)textField{
    
    if (_textField==nil) {
        
        _textField=[[UITextField alloc]init];
        
        _textField.inputView=self.datePicker;
        
        _textField.inputAccessoryView=self.tool;
    }
    return _textField;
}




- (UIToolbar *)tool{
    
    if (_tool==nil) {
        
        _tool=[[UIToolbar alloc]init];
        
        // 这个工具条咱们一般只需要去设置高度就可以了
        _tool.height=44;
        
        UIBarButtonItem *cancle=[[UIBarButtonItem alloc]initWithTitle:@"取消" style:UIBarButtonItemStylePlain target:self action:@selector(cancleBtnClick)];
        
        UIBarButtonItem *done=[[UIBarButtonItem alloc]initWithTitle:@"确定" style:UIBarButtonItemStylePlain target:self action:@selector(doneBtnClick)];

        UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
        
        _tool.items=@[cancle,flexSpace,done];


        
        
    }
    return _tool;
}


就是不在事件中去创建,会消耗性能,降低效率,这时候就要去用到控件懒加载,在用的时候去创建,必须要用strong 若是weak 说不通


4.系统的view 也是进行懒加载的,设置数据不要通过set方法,要在viewDidload方法中,当控制器加载完成后,不然会出现bug

 

posted @ 2016-02-27 00:10  朱保锋  阅读(178)  评论(0编辑  收藏  举报