AdressBook通讯录

1.本示例重点是UITableView的解析,UITableViewDataSource\UITableViewDelegate代理方法的使用

2.第一步:解析plist文件

   通过KVC把字典转化为模型,转化为实际的一组组联系人,而不是空牢牢的一组组数据(其实都是数据,呈现形式不同而已)。

2.实现代理方法(UITableViewDataSource\UITableViewDelegate协议方法)

  必须实现的方法:

  // 行数(组数默认1)

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

 // 每行显示的内容(cell的内容)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

 通过参数indexPath可以准确的从模型字典中锁定联系人,获得联系人的信息 --- 给cell赋值--- 实现对cell的加载

还有一些可选的代理方法:(简写---提示性的)

例如:设置行高(row)的代理方法---heightforrow   设置分组头部显示的内容的代理方法---titleforheader   设置分组头部高度的高度的代理方法--- heightforheader

        设置索引的代理方法--- sectionIndexTitleForTableView   cell点击实现跳转的代理方法---didSelectRowAtIndexPath  

        设置能否进入编辑状态的代理方法---canEdit        设置那种编辑状态的代理方法---editingStyle     编辑状态下代理方法的实现---commitEditng

        设置能否移动的代理方法--- canmove      设置移动的实现方法---moverow   设置限制移动范围的代理方法--- target    修改“删除(title)”的代理方法---titilefordelete

通过这些代理方法 我们可以显示基本的联系人信息(分组 索引),在编辑状态下可以对联系人信息一定的编辑操作(删除 同组减一同)

                                                                                    

3.自定义代理方法---实现页面间的传值

  3.1从主页面把联系人(模型)穿到详细页面

   在代理方法中设置代理 同时实现了页面间的跳转--- 跳转到详情页面---利用传过来的模型 给详情页面赋值---实现详情页面的展示功能 

    3.2实现添加功能---从添加页面--把数据转化为模型---利用代理传到主页面

   在添加页面点击右边的“保存”按钮

#pragma mark 添加点击方法
- (void)rightBarButtonItemDidClickedAction:(UIBarButtonItem *)sender
{

    BCContact *contact = [[BCContact alloc] init];
    contact.name = self.rootView.nameTextField.text;
    contact.gender = self.rootView.genderTextField.text;
    contact.age = self.rootView.ageTextField.text;
    contact.hobby = self.rootView.hobbyTextField.text;
    contact.phoneNumber = self.rootView.phoneNumberTextField.text;
    contact.picture = self.rootView.pictureTextField.text;
    
    // 让代理去执行 协议方法
    [self.delegate translateToContactsVCWithContact:contact];
    
    
    
    // 返回上一级
    [self.navigationController popToRootViewControllerAnimated:YES];
}

利用从主页面跳转到添加页面的响应方法  设置代理

#pragma mark leftBarButtonItem的响应方法
- (void)leftBarButtonItemDidClickedAction:(UIBarButtonItem *)sender
{

    BCAddViewController *addVC = [[BCAddViewController alloc] init];
    // 设置addVC的代理为自己 (代理设置 只能在这里设置)
    addVC.delegate = self;
    [self.navigationController pushViewController:addVC animated:YES];
}

在主页面执行代理方法---模型已传过来---利用传过来的模型修改数据源---同时修改TableView(刷新)

#pragma mark 实现add页面的代理方法
-(void)translateToContactsVCWithContact:(BCContact *)contact
{

    // 姓名的首字母
    NSString *string = [ChineseToPinyin pinyinFromChiniseString:contact.name];
    NSString *firstStr = [string substringToIndex:1];
    
    if ([self.keysArray containsObject:firstStr]) {
        NSMutableArray *groupArray = [self.dictData valueForKey:firstStr];
        // 数据源
        [groupArray insertObject:contact atIndex:0];
        // cell --- 刷新
        [self.rootView.mainTableView reloadData];
    }else{
    
        // 创建数组 把联系人放到数组里面
        NSMutableArray *array = [NSMutableArray array];
        [array insertObject:contact atIndex:0];
        // 数据源
        [self.dictData setObject:array forKey:firstStr];
        
        [self.keysArray addObject:firstStr];
        [self.keysArray sortUsingSelector:@selector(compare:)];
        // cell --- 刷新
        [self.rootView.mainTableView reloadData];
        
    }
}

 

posted @ 2015-07-11 21:28  百川hl  阅读(212)  评论(0编辑  收藏  举报