IOS

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..]

posted @ 2015-12-23 16:22  dreamofei  阅读(203)  评论(0编辑  收藏  举报