UI

UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(20, 60, 280, 70)];
    //文本输入框,一般用作用户输入账号,密码,个人信息等
     //添加输入成的事件监听
[tf addTarget:self action:@selector(valueDidChange:) forControlEvents:UIControlEventEditingDidEnd];
    [tf addTarget:self action:@selector(valueDidChange:) forControlEvents:UIControlEventEditingChanged];//时时输入监听

    tf.placeholder = @"请输入帐号";//提示语,文本输入框,一般用于输入账号,密码,个人信息
[tf setValue:ColorHex_666666 forKeyPath:@"_placeholderLabel.textColor"];//提示语字体颜色
   tf.textColor = ColorHex_333333;//输入时的字体颜色
    tf.font = [UIFont systemFontOfSize:40];//文框标题的字体大小
    tf.borderStyle = UITextBorderStyleLine;//边框风格

    tf.backgroundColor = [UIColor redColor];
    tf.background = [UIImage imageNamed:@"aaa"];//设置背景图片,如果边框风格是圆角,那么背景图失效,否则边框风格失效
    
    tf.adjustsFontSizeToFitWidth = YES;//当文本的宽度超过tf的宽度时,文字会自动变小(系统默认是有下限的)
    tf.minimumFontSize = 30.0f;//文字变小的下限
    tf.textAlignment = NSTextAlignmentLeft; //左右对齐方式,(和label的设置方式一样)
    tf.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;//垂直对齐方式,(btn对齐方式的设置也是用这种方式)
    //tf的左右对齐和垂直对齐在工作中一般都不设置,直接使用默认的

    tf.keyboardType = UIKeyboardTypeEmailAddress;//键盘类型
    tf.returnKeyType = UIReturnKeyNext;//return键的类型,(这个属性只是设置外观,和功能毫无关系)
    tf.secureTextEntry = YES;//安全输入模式(暗文输入)
    tf.clearsOnBeginEditing =YES;    //重新输入时清空tf的文字    
    tf.clearButtonMode = UITextFieldViewModeAlways;//设置清空按钮出现的时机
    
    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
    v.backgroundColor = [UIColor blueColor];
    tf.leftView = v;//这个view用于显示密码前面的👦
    [v release];
    tf.leftViewMode = UITextFieldViewModeAlways;//tf左边的视图和出现的时机(比如说用户的头像或者一把锁)
    
    UIView *av = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
    av.backgroundColor = [UIColor magentaColor];
    tf.inputView = av;//代替键盘(工作中一般不用)
    tf.inputAccessoryView = av;//键盘的附属view(出现在键盘上面)
    [av release];
    [self.view sendSubviewToBack:_result.view];  //点击结果按钮就将....页放到下面

键盘的点击事件:
- (void)textFieldDidBeginEditing:(UITextField *)textField//当键盘弹出时调用
{     NSLog(@"end = %d",textField.tag);       }
- (void)textFieldDidEndEditing:(UITextField *)textField//键盘收起时调用
{   NSLog(@"end = %d",textField.tag);  }
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event//当被点击时时调用(触发)
{
    UITextField *tf = (UITextField *)[self.view viewWithTag:1];
    [tf resignFirstResponder];//收起键盘
           [self.view endEditing: YES];//不管点哪个都能收起键盘
    [self.view sendSubviewToBack:_result.view];  //点击结果按钮就将....页放到下面

}
- (BOOL)textFieldShouldReturn:(UITextField *)textField//点击return键时调用
{}

- (void)valueDidChange:(UITextField *)inputTextField{
    !self.inputValueDidChange ? : self.inputValueDidChange(inputTextField.text);
}
UITextField
UITextField
-(void)viewDidLoad {
self.tableView = [[UITableView alloc]init];
self.tableView.delegate = self;
self.tableView.dataSource = self;
// self.tableView.emptyDataSetDelegate = self;
// self.tableView.emptyDataSetSource = self;
self.tableView.scrollsToTop = YES;
self.tableView.showsVerticalScrollIndicator = NO;//隐藏垂直方向滑动条
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 100;//预编译行高 提高cell创建效率
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;//cell不显示分割线
self.tableView.separatorColor = [UIColor orangeColor];//cell线的颜色
self.tableView.tableFooterView = [UIImageView new];
[self.tableView setLayoutMargins:UIEdgeInsetsZero];//分割线
self.tableView.contentInset = UIEdgeInsetsMake(0, 0,59, 0);//滚动范围
// if (self.isOpenHeaderRefresh){//是否开启下拉刷新
// __weak typeof(self)weakSelf = self;
// self.tabView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// [weakSelf refreshData];
// }];
// }
//
// if (self.isOpenFooterRefresh){//是否开启上啦加载
// __weak typeof(self)weakSelf = self;
// self.tabView.mj_footer = [MJRefreshAutoStateFooter footerWithRefreshingBlock:^{
// [weakSelf loadMoreData];
// }];
// }
[self.view addSubview:self.tableView];
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.view).with.insets(UIEdgeInsetsMake(0, 0, 0, 0));
}];
}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.row==0) {
HomeMoreCell *cell = [tableView dequeueReusableCellWithIdentifier:@"HomeMoreCell"];
if (!cell){
cell= [[[NSBundle mainBundle] loadNibNamed:@"HomeMoreCell" owner:self options:nil] lastObject];
[tableView registerNib:[UINib nibWithNibName:@"HomeMoreCell" bundle:nil] forCellReuseIdentifier:@"HomeMoreCell"];
}
return cell;
}
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"];
}
return cell;

}


//绘制cell圆角
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.isCloseRoundedBorder) {
        // 圆角弧度半径
        CGFloat cornerRadius = 6.f;
        // 设置cell的背景色为透明,如果不设置这个的话,则原来的背景色不会被覆盖
        cell.backgroundColor = UIColor.clearColor;
        cell.contentView.backgroundColor = UIColor.clearColor;
        
        // 创建一个shapeLayer
        CAShapeLayer *layer = [[CAShapeLayer alloc] init];
        CAShapeLayer *backgroundLayer = [[CAShapeLayer alloc] init]; //显示选中
        // 创建一个可变的图像Path句柄,该路径用于保存绘图信息
        CGMutablePathRef pathRef = CGPathCreateMutable();
        // 获取cell的size
        // 第一个参数,是整个 cell 的 bounds, 第二个参数是距左右两端的距离,第三个参数是距上下两端的距离
        CGRect bounds = CGRectInset(cell.bounds, 10,0);
        
        // CGRectGetMinY:返回对象顶点坐标
        // CGRectGetMaxY:返回对象底点坐标
        // CGRectGetMinX:返回对象左边缘坐标
        // CGRectGetMaxX:返回对象右边缘坐标
        // CGRectGetMidX: 返回对象中心点的X坐标
        // CGRectGetMidY: 返回对象中心点的Y坐标
        
        // 这里要判断分组列表中的第一行,每组section的第一行,每组section的中间行
        
        // CGPathAddRoundedRect(pathRef, nil, bounds, cornerRadius, cornerRadius);
        NSInteger startIndex = indexPath.section==0?1:0;
        if (indexPath.row == startIndex&&(indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1)) {
                //一个区只有一个cell则4个角都为圆角
                CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds));
                // 起始坐标为左下角,设为p,(CGRectGetMinX(bounds), CGRectGetMinY(bounds))为左上角的点,设为p1(x1,y1),(CGRectGetMidX(bounds), CGRectGetMinY(bounds))为顶部中点的点,设为p2(x2,y2)。然后连接p1和p2为一条直线l1,连接初始点p到p1成一条直线l,则在两条直线相交处绘制弧度为r的圆角。
                CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds), CGRectGetMidX(bounds), CGRectGetMinY(bounds), cornerRadius);
                CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds), CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius);
                
                CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds), CGRectGetMidX(bounds), CGRectGetMaxY(bounds), cornerRadius);
                
                CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds), CGRectGetMinX(bounds), CGRectGetMidY(bounds), cornerRadius);
                // 终点坐标为左下角坐标点,把绘图信息都放到路径中去,根据这些路径就构成了一块区域了
                CGPathAddLineToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds));
                
           
        }else if(indexPath.row == startIndex){
            //section第一个cell
            // 初始起点为cell的左下角坐标
            CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds));
            // 起始坐标为左下角,设为p,(CGRectGetMinX(bounds), CGRectGetMinY(bounds))为左上角的点,设为p1(x1,y1),(CGRectGetMidX(bounds), CGRectGetMinY(bounds))为顶部中点的点,设为p2(x2,y2)。然后连接p1和p2为一条直线l1,连接初始点p到p1成一条直线l,则在两条直线相交处绘制弧度为r的圆角。
            CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds), CGRectGetMidX(bounds), CGRectGetMinY(bounds), cornerRadius);
            CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds), CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius);
            // 终点坐标为右下角坐标点,把绘图信息都放到路径中去,根据这些路径就构成了一块区域了
            CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds));
        }else if (indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) {
            //section最后一个cell
            // 初始起点为cell的左上角坐标
            CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds));
            CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds), CGRectGetMidX(bounds), CGRectGetMaxY(bounds), cornerRadius);
            CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds), CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius);
            // 添加一条直线,终点坐标为右下角坐标点并放到路径中去
            CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds));
        } else {
            // 添加cell的rectangle信息到path中(不包括圆角) 中间的cell
            CGPathAddRect(pathRef, nil, bounds);
        }
        // 把已经绘制好的可变图像路径赋值给图层,然后图层根据这图像path进行图像渲染render
        layer.path = pathRef;
        backgroundLayer.path = pathRef;
        // 注意:但凡通过Quartz2D中带有creat/copy/retain方法创建出来的值都必须要释放
        CFRelease(pathRef);
        // 按照shape layer的path填充颜色,类似于渲染render
        // layer.fillColor = [UIColor colorWithWhite:1.f alpha:0.8f].CGColor;
        layer.fillColor = [UIColor whiteColor].CGColor;
        
        // view大小与cell一致
        UIView *roundView = [[UIView alloc] initWithFrame:bounds];
        // 添加自定义圆角后的图层到roundView中
        [roundView.layer insertSublayer:layer atIndex:0];
        roundView.backgroundColor = UIColor.clearColor;
        // cell的背景view
        cell.backgroundView = roundView;
        
        // 以上方法存在缺陷当点击cell时还是出现cell方形效果,因此还需要添加以下方法
        // 如果你 cell 已经取消选中状态的话,那以下方法是不需要的.
        UIView *selectedBackgroundView = [[UIView alloc] initWithFrame:bounds];
        backgroundLayer.fillColor = [UIColor clearColor].CGColor;//cell选中颜色
        [selectedBackgroundView.layer insertSublayer:backgroundLayer atIndex:0];
        selectedBackgroundView.backgroundColor = UIColor.clearColor;
        cell.selectedBackgroundView = selectedBackgroundView;
        
        
        
        if(indexPath.row==0&&indexPath.section==0) {
            //设置cell分割线距离屏幕边距的问题
            if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
                [cell setLayoutMargins:UIEdgeInsetsMake(0,SCREEN_WIDTH, 0, 0)];
            }
            if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
                [cell setSeparatorInset:UIEdgeInsetsMake(0,SCREEN_WIDTH, 0, 0)];
            }
        }else{
            //设置cell分割线距离屏幕边距的问题
            if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
                [cell setLayoutMargins:UIEdgeInsetsMake(0, 20, 0, 20)];
            }
            if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
                [cell setSeparatorInset:UIEdgeInsetsMake(0,20, 0, 20)];
            }
        }
        if ([cell isKindOfClass:[CommonBorderInputViewCell class]]||[cell isKindOfClass:[CommonSelectCommentCell class]]) {
            //设置cell分割线距离屏幕边距的问题
            if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
                [cell setLayoutMargins:UIEdgeInsetsMake(0, SCREEN_WIDTH, 0, 0)];
            }
            if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
                [cell setSeparatorInset:UIEdgeInsetsMake(0,SCREEN_WIDTH, 0, 0)];
            }
        }
    }
    
}
#pragma mark - DZNEmptyDataSetSource Methods
-(UIImage*)imageForEmptyDataSet:(UIScrollView *)scrollView
{
return [UIImage imageNamed:@"bg_noData"];
}
- (UIColor*)backgroundColorForEmptyDataSet:(UIScrollView*)scrollView
{
return [UIColor whiteColor];
}
-(void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view{

}
UITableView

 

posted @ 2019-09-26 12:15  🍂浪迹天涯🍂  阅读(205)  评论(0编辑  收藏  举报