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 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }