2015.12.23
1.tableView单组,多组数据(实现datasource协议)显示;(单组就是section=1的多组)。
2.数据显示时的性能优化:
创建cell时设置一个id,然后每次创建前先带id去缓存池中找有没有可用的cell。如果有,修改里面的数据拿去用。如果没有,创建新的cell。
3.tableView右侧导航,实现datasource协议里的对应方法即可。
2015.12.24
1.自定义cell,就是定义一个xil文件和一个与之对应的类文件。然后使用bundle加载xil文件获得一个自定义cell对象。
2.给tableview设置header和footer(当tableview的类型为group时,每个section也有头和尾)。比如:header显示滚动广告,footer显示“加载更多”等。
3.重写awakeFormNib,当xib文件把初始化成一个对象后会调用,利用该方法可以 实现在xib所描述的view加载完毕后执行一些操作。
2015.12.25(圣诞节啊有木有...)
1.自定义高度不确定的cell,如微博;过程:
定义一个数据model和一个记录cell内部各个子控件frame的model。controller中包含frameModel,frameModel中包含数据model(当将数据给frameModel时就可以计算各个部分的frame)。重写返回cell的方法时,创建自定义cell,将对应的frame传给cell就可以得到个性化的cell了。
2015.12.29
1.计算一段文字的长宽:
NSDictionary *attrs=@{NSFontAttributeName:font};CGSize size = [text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size;
2.无损拉伸图片(四周不变,只拉伸纯色部分)
UIImage *img=[UIImage imageNamed:name];UIImage *stretchedImg = [img stretchableImageWithLeftCapWidth:img.size.width*0.5 topCapHeight:img.size.height*0.5];
其中还有resize开头的一些方法也可以做到该效果的图片拉伸。
3.键盘监听
利用通知机制NSNotificationCenter实现监听键盘的动态,如:键盘被文本框叫出时,界面跟着上移:
- (void)viewDidLoad { [super viewDidLoad]; self.tableView.dataSource=self; self.tableView.delegate=self; self.tableView.backgroundColor=[UIColor colorWithRed:224/255.0 green:224/255.0 blue:224/255.0 alpha:1]; self.tableView.separatorStyle=UITableViewCellSeparatorStyleNone; //添加键盘监听 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];}-(void)dealloc{ [[NSNotificationCenter defaultCenter] removeObserver:self];}-(void)keyboardWillChangeFrame:(NSNotification *)note{ CGRect keyboardFrame=[note.userInfo[UIKeyboardFrameEndUserInfoKey]CGRectValue]; CGFloat transformY=keyboardFrame.origin.y-self.view.frame.size.height; //时间 CGFloat duration=[note.userInfo[UIKeyboardAnimationDurationUserInfoKey]floatValue]; [UIView animateWithDuration:duration animations:^{ self.view.transform=CGAffineTransformMakeTranslation(0, transformY); }];}
4.通过文本框的属性可以设置被其叫出的键盘的一些属性,比如Return Key可以设置键盘右下角的按钮类型,还有Auto-enable Return Key可以实现文本框没有文字的时候键盘右下角按钮不可用等。另外通过成为文本框的代理来监听键盘点击的一些事件,比如:textFieldshouldReturn:当点击键盘右下角按钮时调用该方法。
2016.01.25
项目常见文件:
info.plist:项目相关全局的设置;
prefix.pch:其实就是一个头文件。在该头文件中定义的东西(比如宏)在项目中任何地方都可以使用,很好的一个例子就是:定义一个条件编译的宏,来控制程序中的NSLog,使其在调试的时候正常打印,在发布时就去掉。实例代码如下:
#ifdef DEBUG#define MyLog(...) NSLog(__VA_ARGS__)#else#define MyLog(...)#endif
另外,把这些宏定义放到pch文件的#ifdef __OJBC__中,否则,如果项目中有c语言文件,可能会报错,因为有些定义只能在oc中使用,比如import包含
2016.01.26
整个程序启动的原理:
main函数->ApplicationMain函数->创建application,创建applicationDelegate,并将代理设置给application->application开启消息循环->执行代理方法applicationDidFinishLaunchingWithOptions->方法内部生成UIWindow,将window赋值给代理的window变量,创建ViewController,并将控制器设置给window的根控制器(如果有storyboard,就根据info.plist加载mainStoryBoard,创建uiwindow,创建箭头所指的主控制器,并设置给window)。
如此程序便启动了...
2016.01.28
1.处理事件一般有三种方式:①直接有事件处理方法,比如按钮点击②没有直接处理方法,试一试是不是可以成为代理,实现代理的方法③最后就是利用通知NSNotificationCenter来监听某个控件的某个消息。
想要监听文本框的内容变化就需要使用通知机制来实现,监听消息:UITextFieldTextDidChangeNotification。
2.数据存储:@存Plist:拿到沙盒路径NSHomeDirectory()。@存偏好设置:[NSUserDefaults standardUserDefaults]。@对象存储(实现NSCoding协议):存->[NSKeyedArichiver archiveRootObject..];取->[NSKeyedUnarchiver unarchiveObjectWithFile..]