IOS实例随笔

工厂方法实例化

用于简化对象的实例化

通常与类名相同。首字母小写

工厂方法可以传递参数

+(id)类名;


弹出输入:endEditing:YES


在类文件的.h文件中之所以对视图是weak弱引用,是因为在nib文件中(故事板和xib)是已经强引用了


可以用for in方法快速将视图放入数组中

xxx isKindOfClass:[Xxx class]


出了loadView要连线

viewdidload千万不要忘记执行父类的方法[super viewdidload]

纯代码开发中UITableViewController中,根视图self.view就是self.tableView

loadview中self.view要写成self.tableivew

在UITableViewController中要实例化视图,可以先实例化tableView

sectionForSectionIndexTitle:索引数值的转换 返回的是section的索引,等于-1不做跳转

for (UIView* textField in self.view.subviews) {

        if ([textField isKindOfClass:[UITextField class]]) {

            [self.textFieldArray addObject:textField];

        }

    }


字符串 characterAtIndex:(NSUinteger);取出首字母

strong和weak,派生出来的用weak,对上级有依赖关系,有人管了用weak,没人管用strong


UItableviewcell的方法在滚动的时候显示都会运行的
所谓可重用标识符,是用来在缓冲池查找缓冲单元格使用的字符串
不仅cell有优化,header和footer都有优化,如果仅仅是字符串section则不需要
UITableViewHeaderFooterView 返回的是视图UIView,可以优化。这里面包含了一个contentView和cell很像,自定义视图内容部分的代码,需要卸载header==nil分支语句中
if分支里面写的是增加控件的代码,外面写的是设置内容的代码 
强转:父类赋值给子类时要强转,而且程序员必须确认父类就是子类。
ViewWithTag
[button allTargets] 所有的监听事件
- (void)xxx:(id)sender forEvent:(UIEvent *)event
NSSet *set = [event allTouches];
UITouch *touch = [set anyObject];
CGPoint loaction = [touch locationInView:self.tableview];
NSindexPath *indexpath = [self.tableview indexPathForRowAtPoint:location];

IOS7以后      boundingRectWithSize:options:context:替代sizeWithFont:constrainedToSize:lineBreakMode:方法
如果使用故事板或者xib的方式创建cell,那么initWithStyle的方法不会被调用,用awakeFromNib方法替代


取消tableview的分割线
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
不限制文本行数
setNumberOfLines:0
设置外间距
setContentEdgeInsets:UIEdgeInsetsMake(上右下左);
拉伸图片
stretchableImageWithLeftCapWidth:TopCapHeight

UIBarbutton是以数组的形式放入ToolBar的

界面的内容是基于数据的,在做增删改查的时候,先对数据处理,再做界面处理

大BUG,一旦刷新表格数据,表格中的标题行,会重新实例化,而不会从缓冲池中加载。解决方法,自己做一个缓冲池(比如字典),或者注册利用缓冲池

按钮里的视图一定要设置state
自定义按钮里面设置图片等比例显示:self.imageview setContentMode:UIViewContentModeScaleAspectFit;


关于商品列表的九宫格实例的一些总结:

行数 = (Allcount - 1)/percount + 1;

列数 = Allcount / percount;

先抽象出一个商品类,包含名字和图片

在开发过程中发现,每行显示动态的按钮,并且按钮和图片不是以按钮的已给出的格式的需求,这时就需要抽象出按钮类,利用title和image的rect来定制按钮

然后又发现,每个cell包含的按钮个数不定,这时需要抽象出cell类,通过总个数和每行个数算出numberofrowsInSection,总行数

在cell的实例方法中,其实已经把每行的按钮加了进来,不过只是透明的而已没有填充数据,

然后在cell方法中按照indexpath的row(行数)和每行要显示的个数获取对应在维护数组中dateList截取子数组subarrayWithRange:  起点和长度,问题来了。通过行数*每行的个数是可能大于数据长度,此时要判断获得真正数据长度后再去填充数据内容,为了给后面的缓冲池优化带来的影响提供了条件 。问题来了!如果从缓冲池中取出的cell是满按钮的并且当前需要显示的按钮是不满的话,那么就会显示多余的按钮,遗留的按钮。此时可以通过之前的条件来隐藏多余的按钮。大于子数组长度的那些按钮隐藏,然后通过协议代理方法传给控制器完成操作


如果想取到路径最后一部分的字符串,可以使用NSString的lastPathComponent来获取

xib里的Autoshrink的Minimum Font Size可以制定最小字的尺寸以尽量小的字体显出全部内容,lines设置成0就不换行, 解决了省略号问题

在cell中通过选中和取消选中一起用,可以让用户感受到选中一行的效果,也就是动画的效果

tableview继承自scrollview,cell是在contentsize,cell的frame相对于contentsize

loadview是懒加载

IOS7中的状态栏是由控制器来控制 状态栏的方法prefersStatue....
样式:
- (UIstatusBarStyle)preferredStatusBarStyle

self.propertyName 使用self. 是对属性的访问,会进行getter方法,懒加载。 使用_ 是对局部变量的访问。内存管理问题
- (NSArray *)Data
{
   if(_Date == nil){
      获取数据模型加入数组代码
}
  return _Data;
}
button currentTitle
数组 makeObjectsPerformSelector:@selector
用户交互userInteractionEnabled

scrollview哪个方向不能滚就contentsize的哪个方向设置成0

代理设计模式:
1.监听的思想:让一个对象A监听另一个对象的状态,谁想监听谁做代理
2、通知的思想:一个对象B状态发生了改变(做了某些事情),想通知另一个对象A

NStimer定时器
线程优先级,[[NSRunLoop currentRunLoop] addTimer: forMode:NSRunLoopCommonModes];

只要父控件的userInterfaceEnabled为no,子空间也不可以交互

两种提醒:AlertView和UIActionSheet
圆角label    label.layer.cornerRadius = CGFloat和label,layer,masksToBounds = YES或者label.clipsToBounds = YES

如果代理方法是optional,那么代理可能没有实现这个方法,所以需要先去判断他是否实现了此方法在通知代理
if([self.delegate respondsToSelector:@selector(Xxx:)]) {。。。。。};

KVC字典转模型属性 [self setValuesForKeyWithDictionary:dict];
- initWithDict:(NSDictionary *)dict{
       if (self = [super init]){
           [self setValuesForKeysWithDictionary:dict];
       }
       return self;
}
+XxxWithDict:(NSDictionary *)dict{
       return [[self alloc] initWithDict:dict];
}
 
cell中最右边加view,比如开关之类的,cell.accessoryView = [[UISwitch alloc]init];

【UIColor colorWithRed: green: blue:]传递的是比例 xx/255.0 【苹果规定】
活用headView和footView

array valueForKeyPath:@"title",去数组当中把每一个元素的title属性都拿出来返回成一个数组
valueForKey:@“title“ 只能取直接属性,不能取间接属性,没有keypath的间接功能

替换项目旧资源的时候:1、卸载原程序。2、product要clear,清除缓存

footerView只需要设置高度
获取nib里的view用nib instantiateWithOwner:nil options:nil].lastObject之类的

dispatch_after可以用来延迟执行方法
协议命名 规范:空间类名+delegate
代理方法普遍都是optional
判断是否有方法 if([self.delegate respondsToSelector:@selector(xxx:))]

IOS的分割线用height为1的uiview来做

纯代码开发一般用init来做初始化
xib一般用awakefromnib来做
xib适用于控件个数固定的需求

自定义cell高度的时候,可以再抽取一个数据模型出来,包括了frame和之前的数据,并且避免了cell无数次计算frame的次数,通过新的数据模型一次性计算完毕
一定要活用懒加载,精华!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值