美文网首页
OC常用代码记录(UI)

OC常用代码记录(UI)

作者: Look2021 | 来源:发表于2017-10-13 15:03 被阅读0次

    ---------------UIWindow-------------

    [self.window makeKeyWindow];
    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    
    if ([GHUserService service].accessToken) {
        //跳过登陆
        GHBaseNavigationController *vc = [GHBaseNavigationController gh_navigationController];
        window.rootViewController = vc;
    } else {
        GHLoginViewController *loginVc = [[GHLoginViewController alloc] init];
        UINavigationController *loginNavVc = [[UINavigationController alloc] initWithRootViewController:loginVc];
        [loginNavVc setNavigationBarHidden:YES];
        window.rootViewController = loginNavVc;
    }    
    

    ---------------NavigationController---------------

    //重写返回键
    - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
        if (self.childViewControllers.count > 0) {
            viewController.hidesBottomBarWhenPushed = YES;
            
            UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
            [backBtn setImage:[UIImage imageNamed:@"back_homepage_icon"] forState:UIControlStateNormal];
            [backBtn addTarget:self action:@selector(onClickBack:) forControlEvents:UIControlEventTouchUpInside];
            [backBtn sizeToFit];
            UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:backBtn];
            viewController.navigationItem.leftBarButtonItem = leftItem;
        }
        [super pushViewController:viewController animated:animated];
    }
    - (void)onClickBack:(UIButton *)sender {
        [self popViewControllerAnimated:YES];
    }
    #pragma mark - UIGestureRecognizerDelegate
    // 防止在根视图滑动手势后,界面卡死
    - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
        return self.childViewControllers.count > 1;
    }
    
    // 在需要禁用右滑pop手势的ViewController中加入以下代码
        id target = self.navigationController.interactivePopGestureRecognizer.delegate;
        UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:nil];
        [self.view addGestureRecognizer:pan];
    
    // 重写返回按钮
    - (void)backButtonItem {
        UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [backBtn setImage:[UIImage imageNamed:@"back_homepage_icon"] forState:UIControlStateNormal];
        [backBtn addTarget:self action:@selector(dismissController:) forControlEvents:UIControlEventTouchUpInside];
        [backBtn sizeToFit];
        UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:backBtn];
        
        self.navigationItem.leftBarButtonItem = leftItem;
    }
    
    // 根据image设置ButtonItem
    self.navigationItem.leftBarButtonItem =[[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"icon_back"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] style:UIBarButtonItemStylePlain target:self action:@selector(leftButton)];
    
    // 根据Button设置ButtonItem
    UIButton *rightBtn = [[UIButton alloc] init];
    [rightBtn setTitle:@"编辑" forState:UIControlStateNormal];
    [rightBtn setTitleColor:k_Color_354261 forState:UIControlStateNormal];
    [rightBtn setTitle:@"取消" forState:UIControlStateSelected];
    [rightBtn setTitleColor:k_Color_999999 forState:UIControlStateSelected];
                [rightBtn addTarget:self action:@selector(rightBtnClick:) forControlEvents:UIControlEventTouchUpInside];
                self.rightBtn = rightBtn;
                self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightBtn];
    
    //在各个控制器控制tabBar和navigationBar
    -(void)viewWillAppear:(BOOL)animated{
        [super viewWillAppear:animated];
        self.tabBarController.tabBar.hidden = YES;
        self.navigationController.navigationBarHidden = YES;
    }
    

    ---------------UIView---------------

    //给view添加手势
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(coopTypeLabSwitchAction)];
            [_coopTypeTipsLab addGestureRecognizer:tap];
    
    // 通过tag获取view
    UIButton *btn = (UIButton *)[self.view viewWithTag:sender.tag];
    

    ---------------UITableView---------------

    - (UITableView *)tableView {
        if (!_tableView) {
            _tableView = [[UITableView alloc] init];
            [self.view addSubview:self.tableView];
            _tableView.delegate = self;
            _tableView.dataSource = self;
            _tableView.tableFooterView = [UIView new];
            _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
            [_tableView registerNib:[UINib nibWithNibName:@"GHAppiontmentCell" bundle:nil] forCellReuseIdentifier:SweeperAppointmentcellID];
        }
        return _tableView;
    }
    
    #pragma mark ------- TableViewDelegate, TableViewDataSource -------
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return self.dataArr.count;
    }
    
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
        return 65;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        
        GHAppiontmentCell *cell = [tableView dequeueReusableCellWithIdentifier:SweeperAppointmentcellID];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        GHTimerInfoModel *model = self.dataArr[indexPath.row];
        [cell confignAppiontmentCellWithTimerInfoModel:model];
        return cell;
    }
    
    
    //隐藏tableView自带的分割线
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    //想隐藏没用到的cell的分割线,可以直接粗暴的加上尾视图
    self.tableView.tableFooterView = [UIView new];
    //设置分割线颜色
    [tableview  setSeparatorColor:[UIColor blueColor]];
    //设置cell可以选择
    [self.collectTableView setEditing:YES animated:YES];
    
    //根据cell, 刷新cell
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
        [self.tableView reloadRowsAtIndexPaths:indexPath withRowAnimation:UITableViewRowAnimationNone];
    
    // 用storyboard创建UITableViewController
    + (instancetype)gh_sweepermanagement {
        return [[UIStoryboard storyboardWithName:NSStringFromClass(self) bundle:nil] instantiateViewControllerWithIdentifier:NSStringFromClass(self)];
    }
    
    //tableview既要有左滑删除又要有全选删除
    - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    if (self.collectTableView.editing) {
            return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
        }else{
            return UITableViewCellEditingStyleDelete;
        }
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        static NSString *GHHomePageDVcellID = @"GHHomePageDVcellID";
        GHHomePageDVcell *cell = [tableView dequeueReusableCellWithIdentifier:GHHomePageDVcellID];
        if (!cell) {
            cell = [[[NSBundle mainBundle] loadNibNamed:@"GHHomePageDVcell" owner:nil options:nil] firstObject];
        }
        
        return cell;
    }
    
    tableViewCell
    //cell选中没有效果
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    [tableView deselectRowAtIndexPath:indexPath animated:NO];
    //改变全选cell,左边的选中颜色
    cell.tintColor = [UIColor orangeColor];
    
    //改变cell的背景颜色(选择cell的颜色)
    UIView *backgroundViews = [[UIView alloc]initWithFrame:cell.frame];
    backgroundViews.backgroundColor = [UIColor whiteColor];
    [cell setSelectedBackgroundView:backgroundViews];
    

    ---------------UITextField---------------

    _questionTypeTF.rightView = rightImageView;
    _questionTypeTF.rightViewMode = UITextFieldViewModeAlways;
    

    ---------------UIImageView---------------

    // 图片填充模式
    rightImageView.contentMode =  UIViewContentModeRight;
    

    ---------------UIButton---------------

    // 文字和图片都靠左显示
    backBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
    //leffBtn
        UIImage *leftImage = [[UIImage imageNamed:@"drawer_homepage_icon"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:leftImage style:UIBarButtonItemStylePlain target:self action:@selector(leftBtnClick:)];
    // rightBtn
        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"编辑" style:UIBarButtonItemStylePlain target:self action:@selector(rightBtnClick)];
        self.navigationItem.rightBarButtonItem.tintColor = k_Color_333333;
    
    //圆角
    - (UIButton *)extractBtn
    {
        if (!_extractBtn) {
            _extractBtn = [[UIButton alloc] init];
            _controlBtn = [UIButton buttonWithType:UIButtonTypeCustom];
            [_blueView addSubview:_extractBtn];
            [_extractBtn setTitle:NSLocalizedString(@"ED_Mine_MyWallet_Withdrawals", @"提现") forState:UIControlStateNormal];
            _extractBtn.titleLabel.textAlignment = NSTextAlignmentCenter;
            _extractBtn.titleLabel.font = kFont_Button;
            _extractBtn.backgroundColor = [UIColor whiteColor];
            [_extractBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [selectedBtn setTitle:@"取消全选" forState:UIControlStateSelected];
            [selectedBtn setTitle:@"全选" forState:UIControlStateNormal];
            [selectedBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [selectedBtn setTitleColor:[UIColor blackColor] forState:UIControlStateSelected];
            [_extractBtn addTarget:self action:@selector(extractBtnClick) forControlEvents:UIControlEventTouchUpInside];
            //圆角
            [_extractBtn.layer setCornerRadius:22];
            //阴影
            _extractBtn.layer.shadowOffset = kAppUICon_BtnShadowOffset;
            _extractBtn.layer.shadowOpacity = 0.2;
            _extractBtn.layer.shadowColor = [UIColor blackColor].CGColor;
            //画边框线
            [extractBtn.layer setBorderColor:S07_App_LineColor.CGColor];
            [extractBtn.layer setBorderWidth:1];
            [extractBtn.layer setMasksToBounds:YES];
            
            [_extractBtn mas_makeConstraints:^(MASConstraintMaker *make) {
                make.left.equalTo(kAppUICon_LeftSpace);
                make.right.equalTo(kAppUICon_RightSpace);
                make.bottom.equalTo(_blueView.mas_bottom).offset(kAppUICon_BtnHeight / 2);
                make.height.mas_equalTo(kAppUICon_BtnHeight);
            }];
        }
        return _extractBtn;
    }
    
    //使图片和文字水平居中显示
    self.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
    //文字距离上边框的距离增加imageView的高度,距离左边框减少imageView的宽度,距离下边框和右边框距离不变
    [self setTitleEdgeInsets:UIEdgeInsetsMake(self.imageView.frame.size.height + 20 ,-self.imageView.frame.size.width, 0.0,0.0)];
    //图片距离右边框距离减少图片的宽度,其它不边
    [self setImageEdgeInsets:UIEdgeInsetsMake(0.0, 0.0,10, -self.titleLabel.bounds.size.width)];
    

    ---------------UISwitch---------------

        self.modelSwitch.transform = CGAffineTransformMakeScale(0.6, 0.6);
        self.modelSwitch.tintColor = k_Color_EBEBEB;
        self.modelSwitch.backgroundColor = k_Color_EBEBEB;
        self.modelSwitch.layer.cornerRadius = (self.modelSwitch.frame.size.height / 0.6) / 2.0;
        self.modelSwitch.layer.masksToBounds = YES;
    

    ---------------UILabel---------------

    动态改变label的宽度,改变label的部分字符
    _groupName.text = [NSString stringWithFormat:@"%@ (%li)",_ref.groupName,_ref.count];
        NSMutableAttributedString *noteStr = [[NSMutableAttributedString alloc] initWithString:_groupName.text];
        // 需要改变的第一个文字的位置
        NSUInteger firstLoc = [[noteStr string] rangeOfString:@"("].location;
        // 需要改变的最后一个文字的位置
        NSUInteger secondLoc = [[noteStr string] rangeOfString:@")"].location + 1;
        // 需要改变的区间
        NSRange range = NSMakeRange(firstLoc, secondLoc - firstLoc);
        // 改变颜色
        [noteStr addAttribute:NSForegroundColorAttributeName value:S04_App_SubCharColor range:range];
        // 改变字体大小及类型
        [noteStr addAttribute:NSFontAttributeName value:P26_TagAssistFont range:range];
        // 为label添加Attributed
        [_groupName setAttributedText:noteStr];
    

    ---------------UIScrollview---------------

    scrollView.showsHorizontalScrollIndicator = false;//不要滚动效果横杠
    scrollView.showsVerticalScrollIndicator = false;//不要滚动效果竖杠
    
    https://blog.csdn.net/science_Lee/article/details/54315341
    

    ---------------UICollectionView---------------

    UICollectionViewController

    - (UICollectionView *)collectionView {
        if (!_collectionView) {
            
            UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
            layout.itemSize = CGSizeMake((kSCREEN_WIDTH - 15 * 2) /2, kAdaptedHeight(180));
            layout.minimumLineSpacing = 5;// 最小行间距
            layout.minimumInteritemSpacing = 5;// 最小列间距
            _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, 0, 0) collectionViewLayout:layout];
            
            [self.view addSubview:_collectionView];
            _collectionView.backgroundColor = k_Color_WhiteColor;
            _collectionView.showsHorizontalScrollIndicator = NO;
            _collectionView.dataSource = self;
            _collectionView.delegate = self;
            
            [self.collectionView registerClass:[GHExplorationCenterCell class] forCellWithReuseIdentifier:NSStringFromClass([GHExplorationCenterCell class])];
        }
        return _collectionView;
    }
    
    //定义每个Section的四边间距
    -(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
    {
    return UIEdgeInsetsMake(15, 15, 5, 15);//分别为上、左、下、右
    }
    
    

    UICollectionViewCell

    实现UICollectionViewCell自适应文字宽度
    https://blog.csdn.net/lvlemo/article/details/76607073

    CollectionViewDelegate

    头部控件需要继承UICollectionReusableView,只会跑initWithFrame方法
    [self.collectionView registerClass:[RDBookcaseReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:RDBookcaseReusableViewID];
    - (CGSize)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section {
        CGSize size = CGSizeMake(kSCREEN_WIDTH, 200);
        return size;
    }
    - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
        
        UICollectionReusableView *reusableview = nil;
        
        if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {
            // 头部视图
            RDBookcaseReusableView *tempReusableView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:RDBookcaseReusableViewID forIndexPath:indexPath];
            reusableview = tempReusableView;
        }
        return reusableview;
    }
    

    ---------------UITextField---------------

    https://www.jianshu.com/p/740cd34f870b

    [_nameTextFile resignFirstResponder];//退出键盘
    [_nameTextFile becomeFirstResponder];//弹出键盘
    //键盘
    _bankTextF.keyboardType = UIKeyboardTypeNumberPad;
    self.passwordTF.autocorrectionType = UITextAutocorrectionTypeNo;// 关闭拼写自动提示
    
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        /*
         * 不能输入.0-9以外的字符。
         * 设置输入框输入的内容格式
         * 只能有一个小数点
         * 小数点后最多能输入两位
         * 如果第一位是.则前面加上0.
         * 如果第一位是0则后面必须输入点,否则不能输入。
         * 协作费用一次最多不能支付超10000元
         */
        
        // 判断是否有小数点
        if ([textField.text containsString:@"."]) {
            self.isPoint = YES;
        }else{
            self.isPoint = NO;
        }
        
        if (string.length > 0) {
            
            //当前输入的字符
            unichar single = [string characterAtIndex:0];
            NSLog(@"single = %c",single);
            
            // 不能输入.0-9以外的字符
            if (!((single >= '0' && single <= '9') || single == '.'))
            {
                [SVProgressHUD showMsgWithStatus:@"您的输入格式不正确" delay:1];
                return NO;
            }
            
            // 只能有一个小数点
            if (self.isPoint && single == '.') {//最多只能输入一个小数点
                return NO;
            }
            
            // 如果第一位是.则前面加上0.
            if ((textField.text.length == 0) && (single == '.')) {
                textField.text = @"0";
            }
            
            // 如果第一位是0则后面必须输入点,否则不能输入。
            if ([textField.text hasPrefix:@"0"]) {
                if (textField.text.length > 1) {
                    NSString *secondStr = [textField.text substringWithRange:NSMakeRange(1, 1)];
                    if (![secondStr isEqualToString:@"."]) {//第二个字符需要是小数点
                        return NO;
                    }
                }else{
                    if (![string isEqualToString:@"."]) {//第二个字符需要是小数点
                        return NO;
                    }
                }
            }
            
            // 小数点后最多能输入两位
            if (self.isPoint) {
                NSRange ran = [textField.text rangeOfString:@"."];
                // 由于range.location是NSUInteger类型的,所以这里不能通过(range.location - ran.location)>2来判断
                if (range.location > ran.location) {
                    if ([textField.text pathExtension].length > 1) {//小数点后最多有两位小数
                        return NO;
                    }
                }
                //不超过5位数
                if (textField.text.length > 7) {
                    return NO;
                }
            } else {
                //不超过5位数
                if (textField.text.length > 4) {
                    return NO;
                }
            }
        }
        return YES;
    }
    

    --------------UIAlertController---------------

    //创建性别选择
    - (void)creatAlertControllerSheet {
        
        UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:MyString(@"Gender") message:nil preferredStyle:UIAlertControllerStyleActionSheet];
        UIAlertAction *actionMale = [UIAlertAction actionWithTitle:MyString(@"Male") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            
        }];
        UIAlertAction *actionFemale = [UIAlertAction actionWithTitle:MyString(@"Female") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            
        }];
        UIAlertAction *actionCancel = [UIAlertAction actionWithTitle:MyString(@"Cancel") style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
            
        }];
        
        [actionSheet addAction:actionMale];
        [actionSheet addAction:actionFemale];
        [actionSheet addAction:actionCancel];
        [self presentViewController:actionSheet animated:YES completion:nil];
    }
    

    ---------------CABasicAnimation---------------

    _electricityLayer = [CAShapeLayer layer];
    // 设置圆心坐标,设置圆的半径,设置画圆弧度起始角度,设置画圆弧度结束角度,是否顺时针画圆
        UIBezierPath *bezierPath = [UIBezierPath bezierPathWithArcCenter:self.sweeperImageView.center radius:112 + progressWidth / 2 startAngle:3 * M_PI / 2 endAngle:3 * M_PI / 2 * 1.00001 clockwise:NO];
        self.electricityLayer.frame = self.sweeperImageView.bounds;
        self.electricityLayer.fillColor = k_Color_ClearColor.CGColor;// 填充颜色
        self.electricityLayer.strokeColor = k_Color_10CD13.CGColor;// 线条颜色
        self.electricityLayer.lineWidth = progressWidth;
        self.electricityLayer.path = bezierPath.CGPath;
        self.electricityLayer.strokeStart = 0.f;
        self.electricityLayer.strokeEnd = 0.f;
        [self.sweeperImageView.layer addSublayer:self.electricityLayer];
    
    // 充电动画
    - (void)sweeperChargeAnimation {
        CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
        pathAnimation.duration = 2.0;
        pathAnimation.fromValue = [NSNumber numberWithFloat:0.0f];
        pathAnimation.toValue = [NSNumber numberWithFloat:1.f];
        pathAnimation.repeatCount = HUGE_VALF;
        //使视图保留到最新状态
        pathAnimation.removedOnCompletion =YES;
        pathAnimation.fillMode =kCAFillModeForwards;
        [self.electricityLayer addAnimation:pathAnimation
                                     forKey:nil];
    }
    

    相关文章

      网友评论

          本文标题:OC常用代码记录(UI)

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