ios基础笔记(一)

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=[NSMutableArray array];

    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 }



 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开发
原文地址:https://www.cnblogs.com/luanmage/p/4543377.html