码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发-私人通讯录-数据存储和编辑模式

时间:2015-08-09 18:45:16      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:

UI界面

技术分享

-(void)viewDidLoad
{
[super viewDidLoad];
//addTarget:一般用于监听按钮的点击 以及进度条值的改变

//通过通知监听UITextField的改变
/*
addObserver:谁来监听
selector:通知发生的时候调用什么方法
name:通知名称
object:谁发送的通知
注意:object不能写nil,因为如果是nil只要是UITextField发生改变都会调用textChange方法,而我们只在账号和密码输入框发生改变的时候才调用
*/
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.nameField];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.pwdField];

//读取偏好设置信息
NSUuserDefualts *defualts = [NSUuserDefualts standardUserDefualts];
//读取账号信息
self.nameField.text = [defualts obejctForKey:kAccount];
是否需要保存密码
self.remPwd.on =[defualts boolForKey:kRemPwd];
if(self.remPwd.on){ //需要记住密码
self.PwdField.text = [defualts objectForKey:kPassword];
}
是否需要自动登陆
self.autoLogin.on =[defualts boolForKey:kAutoLogin];
if(self.autoLogin.on){ //需要自动登陆
//手动点击登陆按钮
[self logBtnClick];
  }
}
// 移除监听
-(void)dealloc
{...}

/**
* 输入框发生改变的时候调用
*/
-(void)textChange
{...}


#pragma mark - 按钮点击事件
/**
* 点击记住密码
*/
-(IBAction)remPwdSwitch
{
//判断记住密码开关的状态
if(self.remPwd.on == NO){
//取消了记住密码,对应取消自动登陆
//self.autoLogin.on = NO;
[self.autoLogin setOn:NO animated:YES];
}
}

 

 


/**
* 点击自动登陆
*/

-(IBAction)autoLoginSwitch
{...}

 

/**
* 点击登陆按钮
* iOS开发常用框架
* coco4app
*/

-(IBAction)logBtnClick
{
//判断用户名和密码是否正确
if(self.nameField.text isEqualToString:@"lnj")&&
[self.pwdField.text isEqualToString:@"123"]){
//显示蒙版(挡住不让用户继续操作,以及提示用户)
[MBProgressHUD showMessage:@"正在拼命登陆ing....."];

//模拟网络登陆 2秒之后再跳转
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(0.5 * NSEC_PER_SEC)),dispatch_get_main_queue(),^{
//移除提示框
[MBProgressHUD hideHUD];

//保存偏好设置信息
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//1.账号
[defaults setObject:self.nameField.text forKey:kAccount];
//2.密码
[defaults setObject:self.pwdField.text forKey:kPassword];
//3.是否自动登陆
[defaults setBool:self.autoLogin.on forKey:kAutoLogin];
//4.是否记住密码
[defaults setBool:self.remPwd.on forKey:@"kRemPwd"];
//立刻同步(立刻保存数据)
[defaults synchronize];

//跳转到联系人列表
[self
performSegueWithIdentifier:@"login2contacts"sender:@"lnj"];
});
   }else
     {
[MBProgressHUD showError:@"用户名或者密码错误"];
     }
}

在NJContactsViewController.m中
-(void)logout
{...}
#pragma mark - UIActionSheetDelegate
//UIActionSheet上面的按钮被点击的时候调用
//buttonIndex被点击按钮的索引
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{...}
//segue跳转之前调用
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{...}

 

#pragma mark - NJEditViewControllerDelegate
-(void)editViewController:(NJEditViewController *)editViewController didContact:(NJContact *)contact
{
//1.刷新表格
[self.tableView reloadData];

//2.持久化数据
[NSKeyedArchiver archiveRootObject:self.contacts toFile:kFilePath];
}

#pragma mark -NJAddViewControllerDelegate
-(void)addViewController:(NJAddViewController *)addViewController didContact:(NJContact *)contact
{
//1.保存数据
[self.contacts addObject:contact];
//2.刷新表格
[self.tableView reloadData];
//3.持久化模型数据(先要遵守NSCoding协议并实现协议方法)
[NSKeyedArchiver archiveRootObject:self.contacts toFile:kFilePath];
}
PS:将 [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)
lastObject ] stringByAppendingPathComponent:@"contacts.arc"];
定义成宏 kFilePath

编辑模式(在NJContactsViewController.m中)
//只要实现该方法,手指在cell上面滑动的时候就自动实行删除按钮
//commitEditingStyle:传入提交的编辑操作(删除/添加)
//forRowAtIndexPath:当前正在编辑的行
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:
(NSIndexPath *)indexPath
{
//1.修改数据
[self.contacts removeObjectAtIndex:indexPath.row];
//2.刷新表格
//reloadData会重新调用数据源的所有方法。刷新所有行
//该方法用于删除tableView上指定行的cell
//注意:使用该方法的时候,模型中删除的数据条数必须和deleteRowsAtIndexPaths方法中删除的条数一致,否则会报错
//简而言之,就修改的数据必须和删除的cell保持一致
[self.tableView deleteRowsAtIndexPaths:@[indexPath]withRowAnimation:随便选]
//3.更新保存的文件
[NSKeyedArchiver archiveRootObject:self.contacts toFile:kContactsPath];
}

#pragma mark - 懒加载
-(NSMutableArray *)contacts
{
if(_contacts == nil){
//从归档文件中读取数据
_contacts = [NSKeyedUnarchiver unarchiveObjectWithFile:kFilePath];
if(_contacts == nil){ //没有归档文件的情况
_contacts = [NSMutableArray array];
     }
  }
    return _contacts;
}

iOS开发-私人通讯录-数据存储和编辑模式

标签:

原文地址:http://www.cnblogs.com/marshall-yin/p/4715557.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!