在头文件看到方法名后面带有UI_APPEARANCE_SELECTOR 这个宏的可以考虑设置单个的appearance,则所有的item都会被设置.
当某个成员属性是readOnly 而我们又需要改变的话可以想到使用KVC,场景:自定义tabBar!
在分类里面声明@property 只会生成方法的声明,不会生成方法的实现和带有"_"的成员变量;
导航栏标题不显示 要明白 要显示的导航栏的导航标题是当前显示的VC控制器的navigtionitem.title
xib对label换行的方式就是option+return;代码就是直接\n
对普通的视图控制器(尤其是被tabBarController管理的)而言:self.title 与 self.tabBarItem.title 和self.navgitionItem.title 相等.所以,不要轻易使用self.title ,写清楚一点,
配置pch心得:除了把Precomplie Prefix header改为yes之外,就是讲pch拖进项目里,然后将项目名文件夹之前的路径改为$(SRCROOT)
从数组取出的对象是ID类型的,是不能用点语法的,此时我们应该用 中括号方法
Block里面的网络请求不会随着控制器的pop回去而停止,为了防止这种情况的页面crash,我们可以将AFNSessionManager设置为强引用的属性,然后在dealloc里面写上.[AFNsessionManager.operationQuene cancelAllOperation]
有的时候更改系统控件的frame没有变化的时候,可以想到重写其子类的frame和bounds来实现,出现这种状况是系统在重新添加父控件的时候对其被更改的frame进行覆盖,所以我们可以更改其子类的set方法来实现需求
在ios7.0之前,状态栏是交给UIApplication控制的,在ios7.0之后,状态栏是由控制器控制的.更改单个控制器的状态栏,可以通过重写
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}这个方法来实现.
当服务器通过传入page这个参数来给我们控制是上拉还是下拉的时候,我们的判断情况会非常复杂,比如用户执行上拉,上啦数据没完成又跑去执行下拉;亦或者执行完上啦,网速不好,这时候我们都需要判断,
针对用户执行上拉,上啦数据没完成又跑去执行下拉的导致的请求不一致的情况,我们要想到用一个字典属性来接受分别传入的参数,当self.parasDic != 局部变量paraDic的时候,我们以最终传入的参数为主.
// 结束上啦
[self.tableView.footer endRefreshing];
// 参数
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"a"] = @"list";
params[@"c"] = @"data";
params[@"type"] = @"29";
self.params = params;
// 发送请求
[[AFHTTPSessionManager manager] GET:@"http://api.budejie.com/api/api_open.php" parameters:params success:^(NSURLSessionDataTask *task, NSDictionary *responseObject) {
if (self.params != params) return;
针对一些有阴影效果的UITableViewCell,我们可以去看看美工是否提供图片,如果提供图片,则在XIB的- (void)awakeFromNib
{
UIImageView *bgView = [[UIImageView alloc] init];
bgView.image = [UIImage imageNamed:@"mainCellBackground"];//用这个方法直接默认就是图片大小,要防止图片失真哦
self.backgroundView = bgView;//
},则防止图片失真,进入图片的
以诸如button这类复合控件的子控件布局的控件如果不出现在UI界面上,我们可以考虑调用UIButton的 layoutIfNeed方法.
不要轻易更改控件的alphy,因为一旦控件的透明度被改变,则其子控件的透明度也会被改变,因此我们的思路除了让美工提供半透明的图片,还可以想到使自身的背景色的透明度被改变.
1>穿透效果要考虑子控件布局顺序,和scollVIew.contenInset = UIEdgeInsetMake(,,,,);