一:建立编辑联系人的controller,并使其拥有模型contact,且有协议。代码如下

#import <UIKit/UIKit.h>
#import "contact.h"
@class EditContactViewController ;
@protocol EditContactViewControllerDelegate<NSObject> - (void) editContactViewController:(EditContactViewController *)editContactViewController finishedSaveContact:(contact *)con; @end @interface EditContactViewController : UIViewController
@property (strong, nonatomic) contact *contact;
@property (weak, nonatomic) IBOutlet UITextField *nameField;
@property (weak, nonatomic) IBOutlet UITextField *telField;
@property (weak, nonatomic) id <EditContactViewControllerDelegate> delegate; @end

.m文件中代码如下:

#import "EditContactViewController.h"

@interface EditContactViewController ()
@property (weak, nonatomic) IBOutlet UIButton *saveBtn;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *editBtn; @end @implementation EditContactViewController - (void)viewDidLoad {
[super viewDidLoad];
self.nameField.text = self.contact.name;
self.telField.text = self.contact.tel;
}
- (IBAction)saveBtnClick:(id)sender {
if ([self.delegate respondsToSelector:@selector(editContactViewController:finishedSaveContact:)])
{
// NSLog(@"%s",__func__);
self.contact.name = self.nameField.text;
self.contact.tel = self.telField.text;
[self.delegate editContactViewController:self finishedSaveContact:self.contact];
}
} - (IBAction)editBtnClick:(id)sender {
self.nameField.enabled = !self.nameField.enabled;
self.telField.enabled = !self.telField.enabled;
self.saveBtn.hidden = !self.saveBtn.hidden;
if (self.nameField.enabled) {
self.editBtn.title = @"取消";
}else {
self.editBtn.title = @"编辑";
}
} @end

二:

(1)在contactsController中将被点击的cell中的数据传给编辑人控制器,代码如下:

//    判断目标控制器类型
if ([destVc isKindOfClass:[EditContactViewController class]]) {
EditContactViewController *edit = destVc;
NSInteger indexPathOfRow = self.tableView.indexPathForSelectedRow.row;
// 获取要传递给目标控制器的contact
contact *con = self.contacts[indexPathOfRow];
// 设置目标控制器的contact属性
edit.contact = con;
// 设置自己为目标控制器的代理
edit.delegate = self;
}

(2)在contactsController中实现代理方法,并刷新数据,代码如下:

- (void)editContactViewController:(EditContactViewController *)editContactViewController finishedSaveContact:(contact *)con
{
// 获取联系人的数据 并加载到自己的联系人里
// 在自己的数组中找到当时传入的contact,并获取哪一行
NSInteger row = [self.contacts indexOfObject:con];
// 找到要刷新的那一个cell
NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:];
// 局部刷新
[self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:YES];
// 隐藏编辑联系人控制器
[self.navigationController popViewControllerAnimated:YES];
}

三:实际效果如下:

2016-1-6第一个完整APP 私人通讯录的实现 4:编辑联系人的更多相关文章

  1. 2016-1-5第一个完整APP 私人通讯录的实现 1:登录界面及跳转的简单实现2

    ---恢复内容开始--- 实际效果如上 一:Segue的学习 1.什么是Segue: Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue)   ...

  2. 2016-1-7第一个完整APP 私人通讯录的实现 6:在联系人界面增加删除联系人的功能

    一:在viewDidLoad方法中代码添加一个UIBarButtonItem,并将其的类型设置成垃圾桶,代码如下: - (void)viewDidLoad { [super viewDidLoad]; ...

  3. 2016-1-7第一个完整APP 私人通讯录的实现 5:保存数据

    一:登陆界面 1):用户点击登陆按钮并成功登陆后,根据此时的开关情况选择是否保存数据,代码如下: "]) { [self performSegueWithIdentifier:@" ...

  4. 2016-1-6第一个完整APP 私人通讯录的实现 3:添加联系人

    一:创建模型对象:contact用于存放数据,也便于读取加载 #import <Foundation/Foundation.h> @interface contact : NSObject ...

  5. 2016-1-6第一个完整APP 私人通讯录的实现 2:增加提示用户的提示框,监听文本框

    一:在登录时弹出提示用户的提示框: 1.使用第三方框架. 2.在登陆按钮点击事件中增加如下代码: - (IBAction)loginBtnClicked { NSString *acount = se ...

  6. iOS完整App资源收集

    前言 iOS开发学习者都希望得到实战训练,但是很多资料都是只有一小部分代码,并不能形成完成的App,笔者在此处收集了很多开源的完整的App,都有源代码哦! 本篇文章持续更新中,请持续关注.本篇所收集的 ...

  7. MUI框架开发HTML5手机APP(一)--搭建第一个手机APP

      前  言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用HTML5开发手机APP,而随着手机硬件设备配置的不断提升,各种开发框架的不断优化,也使着H5开发的 ...

  8. MUI框架开发HTML5手机APP(一)--搭建第一个手机APP(转)

    出处:http://www.cnblogs.com/jerehedu/p/7832808.html  前  言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用H ...

  9. 浅谈MAIC 2016第二届移动应用(APP)创新大会

    MAIC 2016第二届移动应用(APP)创新大会将于2016年12月在上海举办!MAIC一届比一届办的有质量,规模越大.今年也如约而至,预计今年MAIC规模逾2000人.大会以专业会议,创新应用展览 ...

随机推荐

  1. DI 之 3.2 循环依赖 (伍)

    3.2.1  什么是循环依赖 循环依赖就是循环引用,就是两个或多个Bean相互之间的持有对方,比如CircleA引用CircleB,CircleB引用CircleC,CircleC引用CircleA, ...

  2. RESEACH PAPER

      个,proquest的username和password赫然在目,别急,再看第4个结 果"HB Thompson Subscription Online Databases", ...

  3. 根据List中对象的某一属性进行排序

    不多说,直接看代码: package test; import java.util.ArrayList; import java.util.Collections; import java.util. ...

  4. C# Socket编程(1)基本的术语和概念

    计算机程序能够相互联网,相互通讯,这使一切都成为可能,这也是当今互联网存在的基础.那么程序是如何通过网络相互通信的呢?这就是我记录这系列的笔记的原因.C#语言从一开始就是为了互联网而设计的,它为实现程 ...

  5. VS2012给同一个解决方案添加多个项目

    1.选择文件->添加->新建项目或现有项目 2.接下来在解决方案资源管理器中我们会发现解决方ConsoleApplication1中有两个项目,这里一个是类库项目ClassLibrary1 ...

  6. 20145218 《Java程序设计》第四周学习总结

    20145218 <Java程序设计>第四周学习总结 教材学习内容总结 继承 继承共同行为 继承基本上就是避免多个类间重复定义共同行为. 继承的三个好处:减少代码冗余:维护变得简单:扩展变 ...

  7. 从 bcp 客户端收到一个对 colid x 无效的列长度。

    出现场景: 批量插入数据的时候出现这个问题. 原因分析:某个数据的长度应该是大于这个数据对应的列的定义长度. 所以一一检查到底是那个列的长度超出了. 第一种方法: ——————————2017-1-3 ...

  8. 详解Jquery和AngularJs,Servlet中jsonp解决跨域问题(转)

    众所周知,jsonp可以解决跨域问题,下面是我在查阅资料和实际项目使用后的一些总结. Jquery中jsonp的使用 //myUrl = "http://localhost:8090/api ...

  9. JDicom使用指南

    适用条件本指南用于使用JDicom进行环境模拟.产品调试. 一.安装JDicom运行JDicom安装程序之前,需安装JRE 1.3及以上版本.否则,弹出如下图所示报错 安装JRE 1.4:双击运行可执 ...

  10. C# 检测网络链接

    ;//Local system uses a modem to connect to the Internet. ; //Local system uses a local area network ...