2016-1-6第一个完整APP 私人通讯录的实现 4:编辑联系人
一:建立编辑联系人的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:编辑联系人的更多相关文章
- 2016-1-5第一个完整APP 私人通讯录的实现 1:登录界面及跳转的简单实现2
---恢复内容开始--- 实际效果如上 一:Segue的学习 1.什么是Segue: Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue) ...
- 2016-1-7第一个完整APP 私人通讯录的实现 6:在联系人界面增加删除联系人的功能
一:在viewDidLoad方法中代码添加一个UIBarButtonItem,并将其的类型设置成垃圾桶,代码如下: - (void)viewDidLoad { [super viewDidLoad]; ...
- 2016-1-7第一个完整APP 私人通讯录的实现 5:保存数据
一:登陆界面 1):用户点击登陆按钮并成功登陆后,根据此时的开关情况选择是否保存数据,代码如下: "]) { [self performSegueWithIdentifier:@" ...
- 2016-1-6第一个完整APP 私人通讯录的实现 3:添加联系人
一:创建模型对象:contact用于存放数据,也便于读取加载 #import <Foundation/Foundation.h> @interface contact : NSObject ...
- 2016-1-6第一个完整APP 私人通讯录的实现 2:增加提示用户的提示框,监听文本框
一:在登录时弹出提示用户的提示框: 1.使用第三方框架. 2.在登陆按钮点击事件中增加如下代码: - (IBAction)loginBtnClicked { NSString *acount = se ...
- iOS完整App资源收集
前言 iOS开发学习者都希望得到实战训练,但是很多资料都是只有一小部分代码,并不能形成完成的App,笔者在此处收集了很多开源的完整的App,都有源代码哦! 本篇文章持续更新中,请持续关注.本篇所收集的 ...
- MUI框架开发HTML5手机APP(一)--搭建第一个手机APP
前 言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用HTML5开发手机APP,而随着手机硬件设备配置的不断提升,各种开发框架的不断优化,也使着H5开发的 ...
- MUI框架开发HTML5手机APP(一)--搭建第一个手机APP(转)
出处:http://www.cnblogs.com/jerehedu/p/7832808.html 前 言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用H ...
- 浅谈MAIC 2016第二届移动应用(APP)创新大会
MAIC 2016第二届移动应用(APP)创新大会将于2016年12月在上海举办!MAIC一届比一届办的有质量,规模越大.今年也如约而至,预计今年MAIC规模逾2000人.大会以专业会议,创新应用展览 ...
随机推荐
- svn 大杂烩
svn : trunk 日常开发 branch 多版开发,或者修复bug,测试 tag 开发到一阶段打一个tag,给外部使用 属性externals:可以引用外部的公共工程.这个工程最好是稳定的,不 ...
- JavaScript Table行定位效果
作者:cloudgamer 时间: 2009-09-17 文档类型:原创 来自:蓝色理想 第 1 页 JavaScript Table行定位效果 [1] 第 2 页 JavaScript Table行 ...
- C#程序以管理员权限运行【我采用了第二种,比较好用】
在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员权限登录,其应用程序默认情况下也无法对系统目录.系统注册表 ...
- 扒一扒JavaScript 预解释
带var关键字预解释 让我们先看下这段代码执行的结果: 代码如下: alert(n);//弹出undefinedvar n = 10; 弹出的结果是undefined,为何不是10?让我们再看下面这段 ...
- CSS水平居中和垂直居中解决方案
一.CSS 居中 — 水平居中 DIV等标签本身没有定义自己居中的属性,网上很多的方法都是介绍用上级的text-align: center,然后嵌套一层DIV来解决问题. 可是这个方法有时候完全不起作 ...
- Git从远程分支创建本地分支
git fetch origin master:temp 这句命令的意思是:将远程origin仓库的master分支下载到本地,并新建一个分支temp.
- cycleInterpolator 循环加速器
CycleInterpolator Repeats the animation for a specified number of cycles. The rate of change follows ...
- C# string 数组 每个元素 加上单引号,每一个都被包含在单引号内
在拼接SQL的时候经常会遇到此类问题,尤其是in查询的时候,内容是一段 单引号的 字符的时候 strWhere += " a.EC101_WRYBH IN (" + string ...
- PowerDesigner生成SQL脚本时,对象带有双引号的问题解决
在pdm查看脚本时,发现表名和字段名带有双引号: 1.create table"cfg_user_card_account" ( 2. "user_card_acco ...
- Java 线程综述
线程重在 线程同步和线程通信的编程 1.线程与进程? 线程是指程序在执行过程中,能够执行程序代码的一个执行单元.线程的状态:运行.就绪.挂起(suspend).结束; 进程是指一段正在执行的程序. ...