zoukankan      html  css  js  c++  java
  • BSBuDeJie_03

    一 快速登录

      1 改变状态栏的style

    - (UIStatusBarStyle)preferredStatusBarStyle
    {
        return UIStatusBarStyleLightContent;
    }

      2 自定义按钮(图片在上,文字在下)

    - (void)awakeFromNib
    {
        self.titleLabel.textAlignment = NSTextAlignmentCenter;
    }
    
    - (void)layoutSubviews
    {
        [super layoutSubviews];
        
        //调整图片
        
        self.imageView.x = 0;
        self.imageView.y = 0;
        self.imageView.width = self.width;
        self.imageView.height = self.imageView.width ;
        
        //调整文字
        
        self.titleLabel.x = 0;
        self.titleLabel.y = self.imageView.height;
        self.titleLabel.width = self.width;
        self.titleLabel.height = self.height - self.titleLabel.y;
    }

           

      

    二 简单的登录框

    三 xib中使用kvc

      

    四 占位文字颜色 - 01

      若使用某种属性,在Inspecter中找,否则转到头文件中寻找

      改变内部的属性,通过属性或重写某种方法

      1 使用富文本技术

        //文字属性
        NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
        attrs[NSForegroundColorAttributeName] = [UIColor grayColor];
        
        //NSAttributedString:带有属性的文字(富文本技术)
        NSAttributedString *placeholder = [[NSAttributedString alloc] initWithString:@"手机号" attributes:attrs];
        
        self.phoneField.attributedPlaceholder = placeholder;

      

      2 可变属性

        //NSMutableAttributedString:可变
        NSMutableAttributedString *placeholder = [[NSMutableAttributedString alloc] initWithString:@"手机号"];
        [placeholder setAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]} range:NSMakeRange(0, 1)];
        
        self.phoneField.attributedPlaceholder = placeholder;

      

      3 监听键盘弹出的两种方法

        3.1 通过通知

        3.2 通过textField的代理

    五 占位文字:drawPlaceholderInRect - 02

      自定义TextField

    - (void)drawPlaceholderInRect:(CGRect)rect
    {
        [self.placeholder drawInRect:CGRectMake(0, 15, rect.size.width, 25) withAttributes:@{NSForegroundColorAttributeName : [UIColor grayColor], NSFontAttributeName : self.font}];
    }

      

    六 占位文字颜色 (运行时)runtime - 03

      1 查找内部的成员变量 runtime

        1.1 苹果官方一套C语言库, 能做很多底层操作(比如访问隐藏一些成员变量/成员方法...)

      

    @interface BSTextField : UITextField
    {
        int _age;
        int num;
    }
    
    @end
    - (void)awakeFromNib
    {
        unsigned int count = 0;
        
        Ivar *ivars = class_copyIvarList([self class], &count);
        for (int i = 0; i < count; i++) {
            //取出成员变量
            Ivar ivar = *(ivars + i);
            BSLog(@"%s", ivar_getName(ivar));
        }
    }

      

      2 

    - (void)awakeFromNib
    {
        UILabel *placeholderLabel = [self valueForKeyPath:@"_placeholderLabel"];
        placeholderLabel.textColor = [UIColor redColor];
    }
    - (void)awakeFromNib
    {
    //    UILabel *placeholderLabel = [self valueForKeyPath:@"_placeholderLabel"];
    //    placeholderLabel.textColor = [UIColor redColor];
        
        [self setValue:[UIColor grayColor] forKey:@"_placeholderLabel.textColor"];
       //设置光标颜色和占位文字颜色一致
       self.tintColor = [self.textColor;
    }

       

      3 代码整理

    static NSString * const BSPlaceholderColorKeyPath = @"_placeholderLabel.textColor";
    
    @implementation BSTextField
    
    //- (void)awakeFromNib
    //{
    //    unsigned int count = 0;
    //    
    //    Ivar *ivars = class_copyIvarList([UITextField class], &count);
    //    for (int i = 0; i < count; i++) {
    //        //取出成员变量
    //        Ivar ivar = *(ivars + i);
    //        //打印成员变量的名字
    //        BSLog(@"%s", ivar_getName(ivar));
    //    }
    //    
    //    //释放
    //    free(ivars);
    //}
    
    - (void)awakeFromNib
    {
    //    UILabel *placeholderLabel = [self valueForKeyPath:@"_placeholderLabel"];
    //    placeholderLabel.textColor = [UIColor redColor];
        
        //修改占位文字颜色
    //    [self setValue:[UIColor grayColor] forKey:@"_placeholderLabel.textColor"];
        
        //设置光标颜色和文字颜色一致
        self.tintColor = self.textColor;
        
        //不成为第一响应者
        [self resignFirstResponder];
    }
    
    //当前文本框聚焦时
    - (BOOL)becomeFirstResponder
    {
        //修改占位文字颜色
        [self setValue:self.textColor forKeyPath:BSPlaceholderColorKeyPath];
        return [super becomeFirstResponder];
    }
    
    //当前文本框失去焦点时
    - (BOOL)resignFirstResponder
    {
        //修改占位文字颜色
        [self setValue:[UIColor grayColor] forKeyPath:BSPlaceholderColorKeyPath];
        return [super resignFirstResponder];
    }

      

      

    七 注册框

      1 清除按钮

      

      2 控制间距约束实现滑动效果

    /* 登录框距离控制器view左边的间距 */
    @property (weak, nonatomic) IBOutlet NSLayoutConstraint *loginViewLeftMargin;
    - (IBAction)showLoginOrRegister:(UIButton *)sender {
        
        //退出键盘
        [self.view endEditing:YES];
        
        if (self.loginViewLeftMargin.constant == 0) {//显示注册
            self.loginViewLeftMargin.constant = - self.view.width;
            sender.selected = YES;
        }else{//显示登录
            self.loginViewLeftMargin.constant = 0;
            sender.selected = NO;
        }
        
       [UIView animateWithDuration:0.25 animations:^{
           [self.view layoutIfNeeded];
       }];
    }

    九 推送界面

      1 键盘类型

        

      2 模拟器的键盘和电脑相连

      

      3 判断是否第一次启动

       获得当前软件版本号,通过当前软件的版本号和沙盒中存储的版本号相比,判断是否是初次打开

    + (void)show
    {
        //获得当前软件的版本号
        NSString *key = @"CFBundleShortVersionString";
        NSString *currentVersion = [NSBundle mainBundle].infoDictionary[key];
        //获得沙盒中存储的版本号
        NSString *sanboxVersion = [[NSUserDefaults standardUserDefaults] stringForKey:key];
        
        if (![currentVersion isEqualToString:sanboxVersion]){//第一次打开当前版本
            UIWindow *window = [UIApplication sharedApplication].keyWindow;
            
            BSPushGuideView *guideView = [BSPushGuideView guideView];
            guideView.frame = window.frame;
            [window addSubview:guideView];
            
            //存储版本号
            [[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:key];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }
    }

      4 若点击图片某一范围有效果,可用按钮覆盖上去

    十 

    十一  顶部标签内容

      1 白色半透明的背景色

        UIView *titlesView = [[UIView alloc] init];
        //白色半透明
        titlesView.backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.5];
        titlesView.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];
        titlesView.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.5];
        
        titlesView.width = self.view.width;
        titlesView.height = 35;
        titlesView.y = 64;
        [self.view addSubview:titlesView];

      2 顶部的标签栏

        //内部的子标签
        NSArray *titles = @[@"全部", @"视频", @"声音", @"图片", @"段子"];
        CGFloat width = titlesView.width / titles.count;
        CGFloat height = titlesView.height;
        
        for (NSInteger i = 0; i < titles.count; i++) {
            UIButton *button = [[UIButton alloc] init];
            button.height = height;
            button.width = width;
            button.x = i * width;
            [button setTitle:titles[i] forState:UIControlStateNormal];
            [button setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
            button.titleLabel.font = [UIFont systemFontOfSize:14];
            [titlesView addSubview:button];
        }

      

      3 标签栏底部的指示器

        //底部的红色指示器
        UIView *indicatorView = [[UIView alloc] init];
        indicatorView.backgroundColor = [UIColor redColor];
        indicatorView.height = 2;
        indicatorView.y = titlesView.height - indicatorView.height;
        [titlesView addSubview:indicatorView];
        self.indicatorView = indicatorView;
    - (void)titleClick:(UIButton *)button
    {
        [UIView animateWithDuration:0.25 animations:^{
            self.indicatorView.width = button.width;
            self.indicatorView.centerX = button.centerX;
        }];
        
    }

      

    十二 标签的选中和动画

      1 选中

        //修改按钮颜色
        self.selectedButton.selected = NO;
        button.selected = YES;
        self.selectedButton = button;

      

      2 防止一个标签重复被点 - Disabled

            [button setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
            [button setTitleColor:[UIColor redColor] forState:UIControlStateDisabled];
        //修改按钮颜色 防止标签重复被点
        self.selectedButton.enabled = YES;
        button.enabled = NO;
        self.selectedButton = button;

      3 默认点击第一个按钮

            //默认点击第一个按钮
            if (i == 0) {
                [self titleClick:button];
            }

      

      4 强制布局

            [button layoutIfNeeded];//强制布局(强制更新子控件的frame)

    十三 显示子控制器

     

    十四

    十五 子控制器显示

      1 系统自动创建的控制器的内边距默认是20

        //取出子控制器
        UITableViewController *vc = self.childViewControllers[index];
        vc.view.x = scrollView.contentOffset.x;
        vc.view.y = 0;//设置内边距为0 其默认为20

      2 设置滚动条的内边距

        //滚动条的内边距
        vc.tableView.scrollIndicatorInsets = vc.tableView.contentInset;

    十六 加载文字帖子数据

      将数据写入文件

           [responseObject writeToFile:@"/Users/chenxiaolei/Desktop/duanzi.plist" atomically:YES];
  • 相关阅读:
    windows中抓取hash小结(上)
    内网横向移动常见方法
    常见默认服务端口整理
    Kerberos认证流程简述
    SQL注入之MySQL报错注入整理
    域内常用命令整理
    一个极其朴素的目录扫描Python脚本
    5. 7冲刺记录
    5. 6冲刺记录
    梦断代码阅读笔记
  • 原文地址:https://www.cnblogs.com/roxy/p/6057565.html
Copyright © 2011-2022 走看看