首页 > 代码库 > 小小记事本
小小记事本
页面很简单,是这个样子的.在点击tableviewCell 的时候, 右面的view可以自动弹出,在该view中输入以及显示输出,将该view拖回到右边时,刷新tableview.在重新打开程序的时候内容也仍然在.下面说一下实现过程吧
一.判断进入页面
即判断是否存在plist文件以及版本号是否相同,在AppDelegate.m中写入
-(void)addFirstPage
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
NSString *path = [NSFunction getDocConfigPath];
NSDictionary *dic = [NSFunction getDocConfig];
NSDictionary *info = [[NSBundle mainBundle]infoDictionary];
BOOL exist =[[NSFileManager defaultManager]fileExistsAtPath:path];
if (exist) {
if ([[dic valueForKey:@"Version"]isEqualToString:[info valueForKey:@"CFBundleShortVersionString"]]) {
//如果版本号相同,那么直接进入主界面
self.window.rootViewController =[storyboard instantiateInitialViewController];
}
else{
//如果版本号不相同,那么代表用户以前安装过此软件,直接进入欢迎界面
self.window.rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"HelloViewController"];
}
}
else{
//如果不存在的话,说明软件是头一次安装,建立plist文件,并且进入欢迎页面
self.window.rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"HelloViewController"];
NSString * doc = [[NSBundle mainBundle]pathForResource:@"UserConfig" ofType:@"plist"];
NSDictionary *docdic = [NSDictionary dictionaryWithContentsOfFile:doc];
[docdic writeToFile:path atomically:YES];
NSString *content = [[NSBundle mainBundle]pathForResource:@"Content" ofType:@"plist"];
NSDictionary *contt = [NSDictionary dictionaryWithContentsOfFile:content];
[contt writeToFile:[NSFunction getContentPath] atomically:YES];
}
}
1.首先取到App的document文件夹路径,通过NSFileManager的fileExistAtPath查询该文件夹是否存在UserConfig.plist文件(该plist中存有版本号以及记录之前点击cell的行号)
2.如果版本号相同,那么直接进入主界面.
如果版本号不相同,那么代表用户以前安装过此软件,直接进入欢迎界面.
3.如果不存在的话,说明软件是头一次安装,建立plist文件,并且进入欢迎页面.
在这里需要注意的问题是: [[NSBundle mainBundle]infoDictionary]用这种方法取到的是程序的App文件夹中的系统文件(infoDictionry),里面存着程序名,程序图标,程序的版本号等信息.而App文件夹中的内容是只可读不可写,那就需要我们把版本号取出,与我们在Document中写入的userConfig.plist文件中的版本号进行比较.
二.编辑欢迎页面
由于这个程序只是用来练习的小程序,所以欢迎页面做的很简单,只有几个label和一个进入程序的按钮.将按钮关联到代码中.
只要进入了欢迎页面中,就代表着当前程序的版本号与之前不同.所以要将infoDictionary中的版本号写入到document中的userConfig.plist文件中.
代码如下:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
[self presentViewController:[storyboard instantiateViewControllerWithIdentifier:@"MainViewController"] animated:YES completion:^{}];
NSDictionary *UserConFile =[[NSBundle mainBundle]infoDictionary];
NSDictionary *dic = [NSFunction getDocConfig];
[dic setValue:[UserConFile valueForKey:@"CFBundleShortVersionString"] forKey:_K_VERSION];
[dic writeToFile:[NSFunction getDocConfigPath] atomically:YES];
注:在storyboard中初始化页面与xib不同
三.编写主界面
用storyboard将装饰控件创建完毕. 然后最重要的就是这个tableview了.
在storyboard中拖入一个storyboard,将tableview关联到代码中.同时需要将tableview的代理设置为该view.(这里可以在storyboard 中右键tableview拖入view选择delegate或者在代码中添加tableview.delegate = self;)
在.h文件中声明<UITableViewDelegate>
连接代理后,xcode会出现warn.我们需要在代码中重写它的两个方法:
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
我写的是20行cell的tableview,所以直接在该函数中写入return 20;
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
这个代理函数的作用就是在创建cell的时候,我们想对cell添加什么内容或者创建cell.代码如下:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"normalcell" ];
if (cell ==nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"normalcell"];
}
[cell setBackgroundColor:[UIColor clearColor]];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
NSDictionary *contentConfig =[NSFunction getContent];
NSString *keyName = [NSString stringWithFormat:@"%ld",(long)indexPath.row];
NSString *past = [contentConfig objectForKey:keyName];
cell.textLabel.text =past;
if ([AppDelegate shareDelegate].number == indexPath.row) {
cell.textLabel.textColor = [UIColor whiteColor];
_currentcell = cell;
}
else
{
cell.textLabel.textColor = [UIColor blackColor];
}
return cell;
注:这里使用的创建cell方法是地址池复用cell(不知道术语,所以暂时这么说了...就是每一次进入的时候查看是否存在空闲而且标识为normalcell的,如果存在就可以直接使用,而如果不存在,就新创建一个标识为normalcell的cell)
[AppDelegate shareDelegate].number是在AppDelegate.h中声明的全局变量,用来分辨当前是第几行的cell,当然也可以不用全局变量.因为全局变量应该会影响程序的运行速度
待续