文档章节

百思不得其姐学习笔记

Thanks
 Thanks
发布于 2016/12/31 21:36
字数 1630
阅读 13
收藏 0

appearance 的使用注意点

+(void)load
{
    //appearance 一般在load中加载使用,若要操作控件,必须在UI没有显示的情况下去操作
    NSArray *array =@[self];
    UITabBarItem *tabBarItem =  [UITabBarItem appearanceWhenContainedInInstancesOfClasses:array];
    NSMutableDictionary *dict =[NSMutableDictionary dictionary];
    dict[NSForegroundColorAttributeName] = [UIColor whiteColor];
    [tabBarItem setTitleTextAttributes:dict forState:UIControlStateSelected];
    
    //设置字体大小  必须是在UIControlStateNormal 设置才有效果
    NSMutableDictionary *dict1 =[NSMutableDictionary dictionary];
    dict1[NSFontAttributeName] = [UIFont systemFontOfSize:13];
    [tabBarItem setTitleTextAttributes:dict1 forState:UIControlStateNormal];
}

如果直接用UIButton包装成UIBarButtonItem,会扩大点击区域

UIButton *btn =[UIButton buttonWithType:UIButtonTypeCustom];
[btn setImage:image forState:UIControlStateNormal];
[btn setImage:heightImage forState:UIControlStateHighlighted];
[btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
[btn sizeToFit];
//如果直接用UIButton包装成UIBarButtonItem,会扩大点击区域
// UIBarButtonItem *barbtn =[[UIBarButtonItem alloc]initWithCustomView:btn];
    
//阻止扩大点击区域的解决办法只有在外面再次包装一层UIview
UIView *uiview = [[UIView alloc]initWithFrame:btn.bounds];
[uiview addSubview:btn];
[[UIBarButtonItem alloc]initWithCustomView:uiview]

UIBarButtonItem:描述按钮具体的内容.<br>UINavigationItem:设置导航条上内容(左边,右边,中间). <br>TabBarItem: 设置tabBar上按钮内容(tabBarButton)

导航控制器滑动的失效分析以及解决,经打印发现代理做了别的事情,就先清除的了代理,

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.interactivePopGestureRecognizer.delegate =nil;
}

//清除之后,发现会出现假死状态,再次判断只有非根控制下才能有效
#pragma UIGestureRecognizerDelegate
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{

    return  self.childViewControllers.count>1;
}

导航控制器实现全屏滑动返回

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self.interactivePopGestureRecognizer.delegate action:@selector(handleNavigationTransition:)];
    [self.view addGestureRecognizer:pan];
    //控制手势什么时候触发,只有在非根控制器的时候才触发
    pan.delegate = self;
    //禁止之前手势
    self.interactivePopGestureRecognizer.enabled = NO;

}


#pragma UIGestureRecognizerDelegate
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    return  self.childViewControllers.count>1;
}

UITableView 的复用(由Xib 加载 Cell)

//首先进行注册
 [self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([TLYSubTagViewCell class]) bundle:nil] forCellReuseIdentifier:ID];
 //拿出来可以直接使用
 TLYSubTagViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

设置图片为圆角

self.imaView.layer.cornerRadius = 30;//30为图片的一半  设置为圆角
self.imaView.layer.masksToBounds = YES;//把多余的进行裁剪

设置UITableView 分割先全屏

//清空tabview的的间隙
 self.tableView.separatorInset = UIEdgeInsetsZero;
//清空cell自身的间隙
 cell.separatorInset = UIEdgeInsetsZero;

设置UITableView分割线的第二种方法思路:<br>前提要理解的是tableview的frame是先计算出来后,然后才调用了cellForRowAtIndexPath,做法是:首先将系统默认的分割线设置为none,将整个tableview的背景颜色设置为分割线颜色,然后重写cell的setframe方法.

//在tableview中写的
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.backgroundColor = [UIColor colorWithRed:220/256.0 green:220/256.0 blue:221/256.0 alpha:1];
//重写cell的setframe方法  1表示分割线的高度
-(void)setFrame:(CGRect)frame
{
    frame.size.height-=1;
    [super setFrame:frame];
}

修改UITextField的光标颜色,和占位字颜色

-(void)awakeFromNib
{
    [super awakeFromNib];
    //设置光标的颜色
    self.tintColor = [UIColor whiteColor];
    
    
    //监听编辑开始和结束
    [self addTarget:self action:@selector(touchBegin) forControlEvents:UIControlEventEditingDidBegin];
     [self addTarget:self action:@selector(touchEnd) forControlEvents:UIControlEventEditingDidEnd];
    
    //第一种方法
    NSMutableDictionary *dict =[NSMutableDictionary dictionary];
    dict[NSForegroundColorAttributeName] = [UIColor lightGrayColor];
    self.attributedPlaceholder = [[NSAttributedString alloc]initWithString:self.placeholder attributes:dict];
    
    //第二种方法,也可以直接利用kvc的方式拿到placeholder的lable
   UILabel *placeHolder = [self valueForKey:@"_placeholderLabel"];
  [placeHolder setTextColor:[UIColor lightGrayColor]];
}

//开始编辑 (第一种方法)
-(void)touchBegin{
    NSMutableDictionary *dict =[NSMutableDictionary dictionary];
    dict[NSForegroundColorAttributeName] = [UIColor whiteColor];
    self.attributedPlaceholder = [[NSAttributedString alloc]initWithString:self.placeholder attributes:dict];
}

///结束编辑(第一种方法)
-(void)touchEnd{
    NSMutableDictionary *dict =[NSMutableDictionary dictionary];
    dict[NSForegroundColorAttributeName] = [UIColor lightGrayColor];
    self.attributedPlaceholder = [[NSAttributedString alloc]initWithString:self.placeholder attributes:dict];
}

如果先设置颜色,placeHolderLable是nil的,为了防止这种情况,尽量先保存颜色,利用runtime给系统增加一个属性,在设置占位文字的时候,同时把颜色设置上

+(void)load
{
    //方法进行交换   到时候直接调用setPlaceholder 即可直接设置颜色
    Method m1 = class_getInstanceMethod(self, @selector(setPlaceholder:));
     Method m2 = class_getInstanceMethod(self, @selector(setTly_PlaceHolder:));
    
    method_exchangeImplementations(m1, m2);

}

-(void)setPlaceHolderColor:(UIColor *)placeHolderColor
{
    UILabel *placeHolder = [self valueForKey:@"_placeholderLabel"];
    [placeHolder setTextColor:placeHolderColor];
    
    //如果先设置颜色,placeHolderLable是nil的,为了防止这种情况,尽量先保存颜色,利用runtime给系统增加一个属性,在设置占位文字的时候,同时把颜色设置上
     objc_setAssociatedObject(self, @"placeHolderColor", placeHolderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
 
}


-(void)setTly_PlaceHolder:(NSString *)placeHolder
{
    [self setTly_PlaceHolder:placeHolder];
    self.placeHolderColor=self.placeHolderColor;
    
}


-(UIColor *)placeHolderColor
{
    return objc_getAssociatedObject(self.placeholder, @"placeHolderColor");
}

// 处理cell间距,默认tableView分组样式,有额外头部和尾部间距

self.tableView.sectionHeaderHeight = 0;
self.tableView.sectionFooterHeight = 10;
self.tableView.contentInset = UIEdgeInsetsMake(-25, 0, 0, 0);

获取整个文件夹或者文件大小

-(void)getFileSize:(NSString *)directoryPath
{
    // NSFileManager
    // attributesOfItemAtPath:指定文件路径,就能获取文件属性
    // 把所有文件尺寸加起来
    
    ///获取文件管理者
    NSFileManager *manager =[NSFileManager defaultManager];
    //获取文件夹下所有的子路径
   NSArray *arrays = [manager subpathsAtPath:directoryPath];
    
    NSInteger totalSize =0;
    
    //进行遍历
    for (NSString *path in arrays) {
            //拼接 获取全路径
       NSString *subPath = [directoryPath stringByAppendingPathComponent:path];
        if([subPath containsString:@".DS"])continue;//忽略隐藏文件
        
        //是否是文件夹
        BOOL isDirectory ;
        //判断文件是否存在
       BOOL isExists = [manager fileExistsAtPath:subPath isDirectory:&isDirectory];
        if(!isExists || isDirectory)continue;
        //获取文件的大小
        NSDictionary *attr =  [manager attributesOfItemAtPath:subPath error:nil];
        NSInteger filesize = [attr fileSize];
        totalSize+=filesize;
        
    }
    
    NSString *sizeStr = @"当前大小";
    // MB KB B
    if (totalSize > 1000 * 1000) {
        // MB
        CGFloat sizeF = totalSize / 1000.0 / 1000.0;
        sizeStr = [NSString stringWithFormat:@"%@(%.1fMB)",sizeStr,sizeF];
    } else if (totalSize > 1000) {
        // KB
        CGFloat sizeF = totalSize / 1000.0;
        sizeStr = [NSString stringWithFormat:@"%@(%.1fKB)",sizeStr,sizeF];
    } else if (totalSize > 0) {
        // B
        sizeStr = [NSString stringWithFormat:@"%@(%.ldB)",sizeStr,totalSize];
    }
    
    NSLog(@"%@",sizeStr);

}

如果ScrollView 在导航控制器中,ScrollView内部的所有自控制器会自动向下移动64(ScrollView的内边距会自动向下64)

//不允许自动修改UIScrollView的内边距
    self.automaticallyAdjustsScrollViewInsets=NO;
    scrollView.contentSize=CGSizeMake(80, 0);//表示可以左右滑动,0表示上下不可以滑动,一般情况里面嵌套UItabview这样设置,只保证里面的UITabview滑动就可以了

如果设置背景色为透明的,尽量不要设置alpha,防止所有子控件透明,尽量设置backgroundColor.

NS_DESIGNATED_INITIALIZER 表示OC中特定方法,若要覆盖此方法,必须添加调用父类方法.不然会报如下警告

Designated initializer missing a 'super' call to a designated initializer of the super class
//举例
-(instancetype)initWithFrame:(CGRect)frame
{
    if(self == [super initWithFrame:frame]){
       
    }
    return self;
}

计算文字的高度

    //ScreenW 表示屏幕的宽度 表示最大高度 
  CGFloat height = [topic.text boundingRectWithSize:CGSizeMake(ScreenW-20, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17.0]} context:nil].size.height;

heightForRowAtIndexPath的调用频率<br>

  1. 每次刷新表格的时候会调用<br>
  2. 每当cell进入屏幕范围内的时候,会再次调用

总结说明:如果在heightForRowAtIndexPath中计算高度,会非常的消耗性能,可以尝试设置一个估算的高度或者计算完高度进行保存.<br>

self.tableView.estimatedRowHeight =200;

使用估算高度(estimatedRowHeight)的优缺点<br> 优点: 1 可以降低heightForRowAtIndexPath方法的调用频率 2 将计算cell高度的操作延迟执行了(相当于cell高度的计算是懒加载的,只有用到了才执行)<br> 缺点: 1.由于是估算的,所以滚动条可能不准确,会造成跳动(如果不设置估算高度会好很多)

© 著作权归作者所有

Thanks
粉丝 9
博文 93
码字总数 23216
作品 0
南阳
私信 提问
Flask不能加载CSS样式文件

今天跟着Flask教程在学习,进行到“ 静态文件”部分,自己添加了一个简单的.css文件,但是浏览器却无法加载。 我的代码很简单,过程如下: 1.创建main.css 1.在页面中引用main.css 3.路由方法...

黃健民
2015/01/15
9K
1
mysql级联查询求指点!

小弟想做一个mysql级联查询的通用函数,在测试输出时,临时表中存放的竟然是N条输入参数中的id,百思不得姐,请高手指点: ps:可以用任意一个有级联的表测试,至于查询效率,也请大家指点一下吧!...

magican
2014/04/05
1K
3
SurfaceView周边淡出效果

请教个问题,点击视频播放,其他地方变黑(有点像变淡的效果),界面底下有评论栏 然后点击界面黑色的地方,又会显示出整个布局。 描述可能不清楚,效果就是百思不得姐里面点击视频播放的效果...

楠D枫
2016/12/01
133
0
python爬虫:爬取网站视频

python爬取百思不得姐网站视频:http://www.budejie.com/video/ 新建一个py文件,代码如下: #!/usr/bin/python -- coding: UTF-8 -- import urllib,re,requestsimport sysreload(sys)sys.se......

M四月天
2017/05/23
0
0
一个关于list的appen奇怪问题

在pydev环境下,流程是这样:从文件中pickle.load所有数据,数据本身应该是一个list,读取之后向list中append一行数据之后,再pickle.dump回文件。现在遇到的问题是,如果list是空的,当app...

WhatABigX
2016/09/13
168
3

没有更多内容

加载失败,请刷新页面

加载更多

zk中ToBeAppliedRequestProcessor解析

ToBeAppliedRequestProcessor在Leader中 在已处理事务和最后处理事务处理器之间,处理器链上下一个是FinalRequestProcessor public void processRequest(Request request) throws RequestPro...

writeademo
36分钟前
3
0
Allegro快捷键设置-PCB环境

立题简介: 内容:简单介绍Allegro绘制的PCB环境下的快捷键; 来源:实际使用得出; 作用:对Allegro绘制PCB快捷键进行介绍; PCB环境:Cadence 16.6; 立题详解: 对“allegro”板而言,其在...

demyar
37分钟前
3
0
idea maven web项目启动build时报错java.lang.NullPointerException

之前还好好的,重启一下idea就报这个错了,大概率是tomcat没杀掉端口被占用了,在tomcat配置中更换一下sever端口就好了

宇辰OSC
41分钟前
3
0
weed3-2.3.1.查询之输出

Weed3 一个超轻量级ORM框架(只有0.1Mb哦) 源码:https://github.com/noear/weed3 源码:https://gitee.com/noear/weed3 查询可是个复杂的话题了,可能我们80%的数据库处理都在查询。 今天先...

刘之西东
41分钟前
3
0
【Android JetPack系列】数据绑定:DataBinding

参考MVVM

Agnes2017
50分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部