ios基础笔记(一)

摘要:
1.将按钮文本的大小设置为按钮本身按钮的大小。size=[button.currentTitleizeWithFont:button.titleLabel.font];button.backgroundColor=[UIColoredColor];2.通用大小/**44:单元格的默认高度,导航栏的可见高度49:UITabBar的默认高度64:从窗口顶部到导航栏底部20:状态栏的高度320
1.    设置按钮文字的尺寸 为 按钮自己的尺寸
     button.size = [button.currentTitle sizeWithFont:button.titleLabel.font];
     button.backgroundColor=[UIColor redColor];

2.    常用尺寸
/**
 44 : cell的默认高度、导航栏的可见高度
 49 : UITabBar的默认高度
 64 : 从窗口顶部到导航栏底部
 20 : 状态栏高度
 320 : 竖屏情况下的屏幕宽度
 480 : 竖屏情况下的3.5 inch 的屏幕高度
 568 : 竖屏情况下的4.0 inch 的屏幕高度
 */

3.    textview改变通知
#warning 不要设置自己的代理为自己本身
        // 监听内部文字改变
//        self.delegate = self;
        
        /**
         监听控件的事件:
         1.delegate
         2.- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
         3.通知
         */
        
        // 当用户通过键盘修改了self的文字,self就会自动发出一个UITextViewTextDidChangeNotification通知
        // 一旦发出上面的通知,就会调用self的textDidChange方法
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange) name:UITextViewTextDidChangeNotification object:self];

4.    copy策略,重写setter方法,
- (void)setPlacehoder:(NSString *)placehoder
{
#warning 如果是copy策略,setter最好这么写
    _placehoder = [placehoder copy];
    
    // 设置文字
    self.placehoderLabel.text = placehoder;
    
    // 重新计算子控件的fame,
    [self setNeedsLayout];//重新布局子控件
}

4.    UiTabbar  bug修复
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UINavigationController *)viewController
{
    UIViewController *vc = [viewController.viewControllers firstObject];
    if ([vc isKindOfClass:[HMHomeViewController class]]) {
        if (self.lastSelectedViewContoller == vc) {
            [self.home refresh:YES];
        } else {
            [self.home refresh:NO];
        }
    }
    
    self.lastSelectedViewContoller = vc;
}
    self.lastSelectedViewContoller = vc;
    /**
     其实在这里隐藏着一个问题,如果如图所示你的4个TabBar都是指向4个NavigationController,那么没有问题,运行OK。
     但如果你的4个TabBar有任何一个指向的不是NavigationController,那么程序就会crash。因为非NavigationController不能够响应 popToRootViewControllerAnimated: 方法。
     */
    
    if ([viewController isKindOfClass:[UINavigationController class]]) {
        [(UINavigationController *)viewController popToRootViewControllerAnimated:YES];
    }

5.
// 自定义Log
1 #ifdef DEBUG
2  
3 #define WCLog(...) NSLog(@"%s %d 
 %@

",__func__,__LINE__,[NSString stringWithFormat:__VA_ARGS__])
4  
5 #else
6 #define WCLog(...)
7 #endif

 6.懒加载

# pragma mark 懒加载

//-(NSMutableArray *)imageLinkURL

//{

//    if (_imageLinkURL==nil) {

//        _imageLinkURL=[NSMutableArray array];

//    }

//    return _imageLinkURL;

//}

如果不使用懒加载,数组初始化方式如下,

    NSMutableArray *imageArray=[NSMutableArrayarray];

    for (AdImageModel *model in imageModels) {

        [imageArray addObject:model.imageUrl];

 

    }

    self.imageLinkURL=imageArray;

 

 

不可变数组可以不初始化,可变数组必须初始化

 

7.block中循环引用

 

 __weak typeof(clearCache) weakClearCache = clearCache;

    __weak typeof(self) weakVc = self;

    clearCache.operation = ^{

        [MBProgressHUD showMessage:@"正在清除缓存...."];

        // 清除缓存

        NSFileManager *mgr = [NSFileManager defaultManager];

        [mgr removeItemAtPath:imageCachePath error:nil];

        // 设置subtitle

        weakClearCache.subtitle = nil;

        // 刷新表格

        [weakVc.tableView reloadData];        

        [MBProgressHUD hideHUD];

    };
  8.用搜索子控制器中寻找父控制器
1 - (UIViewController*)viewController {
2     for (UIView* next = [self  superview]; next; next = next.superview) {
3         UIResponder* nextResponder = [next nextResponder];
4         if ([nextResponder isKindOfClass:[UIViewController class]]) {
5             return (UIViewController*)nextResponder;
6         }
7     }
8     return nil;
9 }
ios基础笔记(一)第1张ios基础笔记(一)第2张
 1 @interface UIView (Extend) 
 2 - (UIViewController *)viewController; 
 3 @end 
 4  
 5 @implementation UIView (Extend) 
 6  
 7 - (UIViewController*)viewController {   
 8    for (UIView* next = [self superview]; next; next = next.superview) {    
 9            UIResponder* nextResponder = [next nextResponder];     
10                 if ([nextResponder isKindOfClass:[UIViewController class]]) {      
11                         return (UIViewController*)nextResponder;
12                }   
13       }
14  return nil; 
15 }
16 @end 
17 
18  使用示例:
19 -(void)buttonPress{
20     ElectronFrom *electronForm=[[ElectronFrom alloc]init];
21     [[self viewController].navigationController pushViewController:electronForm animated:YES];
22     [electronForm release];
23 }
View Code

  
 

免责声明:文章转载自《ios基础笔记(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇处理JSON循环引用序列化与反序列化问题的终极方案x-frame-options、iframe与iframe的一些操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

图片懒加载与预加载

预加载 常用的是new Image();,设置其src来实现预载,再使用onload方法回调预载完成事件。 functionloadImage(url, callback) {   var img = new Image(); //创建一个Image对象,实现图片的预下载   img.src =url;   if(img.complete)   { //如...

微信小程序的图片懒加载

在普通的web页面当中,我们都知道图片懒加载可以提升浏览器的加载速度。原理是图片用空或者占位图片进行显示,当屏幕移动到图片位置的时候,再把图片的地址换成它的地址。那么,在小程序当中呢,最近老大让看一下微信小程序的优化方面,图片是很吃资源的一项,所以我把矛头指向了懒加载: 首先写代码之前一定要理清楚思路,我想的基础是懒加载的思路,首先设立一个数组都为fals...

彻底搞懂Spring类加载(注解方式)

单例预加载默认 单例懒加载   正确的加载时机   错误的加载时机 多例懒加载仅支持懒加载 spring beanfactory类高级用法   反射方式加载类 需要注意的问题 通过 Spring 注册的类一共只有三种加载方式! 环境:spring-context 4.2.6jdk 8Eclipse 4.7 最简单的配置 <?xml ve...

vue路由懒加载及组件懒加载

一、为什么要使用路由懒加载   为给客户更好的客户体验,首屏组件加载速度更快一些,解决白屏问题。 二、定义   懒加载简单来说就是延迟加载或按需加载,即在需要的时候的时候进行加载。 三、使用   常用的懒加载方式有两种:即使用vue异步组件 和 ES中的import 1、未用懒加载,vue中路由代码如下 import Vue from 'vue'...

SpringXML方式配置bean的懒加载lazy-init

lazy-init(懒加载),表示该bean在容器初始化的时候不进行初始化。 例如: <bean name="role1" class="com.fz.entity.Role" lazy-init="true"> 以上配置表示:spring容器在初始化的时候不会初始化role1这个bean,当配置上lazy-init=true之后,表示该bea...

webp图片实践之路

最近,我们在项目中实践了webp图片,并且抽离出了工具模块,整合到了项目的基础模板中。传闻IOS10也将要支持webp,那么使用webp带来的性能提升将更加明显。估计在不久的将来,webp会成为标配。 本文主要分享一下我们在webp图片使用上的实践之路。   我们会从三部分来聊聊webp这个话题。 什么是webp,它有什么用? 使用webp的常规方法以及...