iOS开发UI篇—实现一个私人通讯录小应用(二)

一、实现功能说明

(1)点击注销按钮,弹出一个对话框,点击确定后移除当前栈顶的控制器,返回开始界面,点击取消,不做任何操作。

注意:注销按钮的单击事件已经进行了连线。实现-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex需要遵守UIActionSheetDelegate协议。

 1 //注销按钮
 2 - (IBAction)logoutBtn:(id)sender {
 3     
 4     UIActionSheet *sheet =[[UIActionSheet alloc]initWithTitle:@"确定要注销?" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"确定" otherButtonTitles: nil];
 5     
 6     [sheet showInView:self.view];
 7 }
 8 
 9 #pragma mark-代理方法
10 -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
11 {
12     if (buttonIndex!=0)return;
13     //移除栈顶的控制器
14     [self.navigationController popViewControllerAnimated:YES];
15 }

2)当两个文本框的状态发生改变时,通知添加按钮变为可用状态。

知识点:通知(注册监听)

 1 - (void)viewDidLoad
 2 {
 3     [super viewDidLoad];
 4     
 5     //1.获得通知中心
 6     NSNotificationCenter *center=[NSNotificationCenter defaultCenter];
 7     //2.注册监听
 8     [center addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.nameFeild];
 9     [center addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.phoneFeild];
10 }
11 
12 
13 
14 //当文本框内容改变的时候,通知self调用该方法
15 -(void)textChange
16 {
17     //判断,如果两个文本框的内容都改变(有值)的时候,添加按钮变成可交互的
18     self.addBtn.enabled=(self.nameFeild.text.length>0&&self.phoneFeild.text.length>0);
19     NSLog(@"通知调用的事件");
20 }
21 
22 //临终遗言
23 -(void)dealloc
24 {
25     [[NSNotificationCenter defaultCenter] removeObserver:self];
26 }

(3)数据的逆传(使用代理)

YYContatcsViewController.m文件

  1 //
  2 //  YYContatcsViewController.m
  3 //  01-私人通讯录(登录页面搭建)
  4 //
  5 //  Created by apple on 14-6-8.
  6 //  Copyright (c) 2014年 itcase. All rights reserved.
  7 //
  8 
  9 #import "YYContatcsViewController.h"
 10 #import "YYAddViewController.h"
 11 #import "YYInfoModel.h"
 12 
 13 //遵守协议
 14 @interface YYContatcsViewController ()<UIActionSheetDelegate,YYAddViewControllerDelegate>
 15 @property (strong, nonatomic) IBOutlet UITableView *tableview;
 16 
 17 //数组,用来保存用户添加的数据
 18 @property(nonatomic,strong)NSMutableArray *array;
 19 
 20 - (IBAction)logoutBtn:(id)sender;
 21 
 22 @end
 23 
 24 @implementation YYContatcsViewController
 25 
 26 
 27 - (void)viewDidLoad
 28 {
 29     [super viewDidLoad];
 30 }
 31 
 32 //注销按钮
 33 - (IBAction)logoutBtn:(id)sender {
 34     
 35     UIActionSheet *sheet =[[UIActionSheet alloc]initWithTitle:@"确定要注销?" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"确定" otherButtonTitles: nil];
 36     
 37     [sheet showInView:self.view];
 38 }
 39 
 40 #pragma mark-代理方法
 41 -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
 42 {
 43     if (buttonIndex!=0)return;
 44     //移除栈顶的控制器
 45     [self.navigationController popViewControllerAnimated:YES];
 46 }
 47 
 48 
 49 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
 50 {
 51     UIViewController *c=segue.destinationViewController;
 52     YYAddViewController *addc=(YYAddViewController *)c;
 53     addc.delegate=self;
 54     
 55 }
 56 
 57 #pragma mark-YYAddViewControllerDelegate
 58 -(void)addViewControllerDidAddBtn:(YYAddViewController *)addViewController contatc:(YYInfoModel *)contatc
 59 {
 60     //1.把数组保存到数组中
 61 //    [self.Info addObject:contatc];
 62 //    //2.刷新表格
 63 //    NSLog(@"%@",contatc);
 64 //    NSLog(@"%@",self.Info);
 65 //    [self.tableview reloadData];
 66     NSLog(@"%@,%@",contatc.name,contatc.phone);
 67     [self.array addObject:contatc];
 68     [self.tableview reloadData];
 69 
 70 }
 71 
 72 -(NSMutableArray *)array
 73 {
 74     if (_array==Nil) {
 75         _array=[NSMutableArray array];
 76     }
 77     return _array;
 78 }
 79 #pragma mark-tableview的数据源
 80 //一共有多少行
 81 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 82 {
 83 //       return self.Info.count;
 84     return self.array.count;
 85 }
 86 //每组每行的cell
 87 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 88 {
 89     static NSString *identifier=@"info";
 90     //先去缓存中取。如果缓存中没有,那么就到storyboard中去查找
 91     UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier];
 92     //在storyboard中设置cell的标识符为info
 93     
 94     //设置cell的数据
 95 //    
 96 //     UITableViewCell *cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:Nil];
 97     
 98     YYInfoModel *info=self.array[indexPath.row];
 99     cell.textLabel.text=info.name;
100     cell.detailTextLabel.text=info.phone;
101     
102 
103     //返回cell
104     return cell;
105 }
106 @end

YYAddViewController.h文件

 1 //
 2 //  YYAddViewController.h
 3 //  01-私人通讯录(登录页面搭建)
 4 //
 5 //  Created by 孔医己 on 14-6-8.
 6 //  Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8 
 9 #import <UIKit/UIKit.h>
10 @class YYAddViewController, YYInfoModel;
11 //自定义一个协议,让上一个控制器(YYContatcsViewController)成为当前控制器的代理
12 
13 //@protocol  YYAddViewControllerDelegate <NSObject>
14 //
15 ////协议方法
16 //-(void)addViewControllerDidAddBtn:(YYAddViewController *)addViewController contatc:(YYInfoModel *)contatc;
17 
18 @protocol YYAddViewControllerDelegate <NSObject>
19 
20 //- (void)editViewControllerDidAddBtn:(NJEditViewController *)editViewController name:(NSString *)name number:(NSString *)phoneNumber;
21 
22 - (void)addViewControllerDidAddBtn:(YYAddViewController *)editViewController contatc:(YYInfoModel *)contatc;
23 
24 @end
25 
26 @interface YYAddViewController : UIViewController
27 
28 //新增一个代理属性
29 @property(nonatomic,strong)id<YYAddViewControllerDelegate> delegate;
30 
31 @end

YYAddViewController.m文件

 1 //
 2 //  YYAddViewController.m
 3 //  01-私人通讯录(登录页面搭建)
 4 //
 5 //  Created by 孔医己 on 14-6-8.
 6 //  Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8 
 9 #import "YYAddViewController.h"
10 #import "YYInfoModel.h"
11 
12 @interface YYAddViewController ()
13 //姓名输入框
14 @property (weak, nonatomic) IBOutlet UITextField *nameFeild;
15 //电话号码输入框
16 @property (weak, nonatomic) IBOutlet UITextField *phoneFeild;
17 //添加按钮
18 @property (weak, nonatomic) IBOutlet UIButton *addBtn;
19 
20 //添加按钮的点击事件
21 - (IBAction)addBtnOnclick:(id)sender;
22 
23 @end
24 
25 @implementation YYAddViewController
26 
27 
28 #pragma mark- 监听是否添加
29 - (void)viewDidLoad
30 {
31     [super viewDidLoad];
32     
33     //1.获得通知中心
34     NSNotificationCenter *center=[NSNotificationCenter defaultCenter];
35     //2.注册监听
36     [center addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.nameFeild];
37     [center addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.phoneFeild];
38 }
39 
40 
41 
42 //当文本框内容改变的时候,通知self调用该方法
43 -(void)textChange
44 {
45     //判断,如果两个文本框的内容都改变(有值)的时候,添加按钮变成可交互的
46     self.addBtn.enabled=(self.nameFeild.text.length>0&&self.phoneFeild.text.length>0);
47     NSLog(@"通知调用的事件");
48 }
49 
50 //临终遗言
51 -(void)dealloc
52 {
53     [[NSNotificationCenter defaultCenter] removeObserver:self];
54 }
55 
56 
57 - (void)viewDidAppear:(BOOL)animated
58 {
59     // 3.主动召唤出键盘
60     [self.nameFeild becomeFirstResponder];
61     //    [self.nameField resignFirstResponder];
62 }
63 
64 
65 - (IBAction)addBtnOnclick:(id)sender {
66     
67     //点击添加按钮后,把数据保存到模型数组中
68     //跳转
69     [self.navigationController popViewControllerAnimated:YES];
70     
71     //1.把当前界面文本框中的信息保存到模型中
72     YYInfoModel *info=[[YYInfoModel alloc]init];
73     info.name=self.nameFeild.text;
74     info.phone=self.phoneFeild.text;
75     
76     //2.数据逆传(把当前控制器view的数据传递到上一个控制器的view中)
77     //使用代理,自定义一个代理,并使用代理传递数据
78     //如果代理方法存在就通知代理调用该方法,传递数据
79     if ([self.delegate respondsToSelector:@selector(addViewControllerDidAddBtn:contatc:)]) {
80         NSLog(@"sadafaf");
81         [self.delegate addViewControllerDidAddBtn:self contatc:info];
82     }
83  
84     NSLog(@"dddd");
85 }
86 @end

二、效果

注销的弹窗效果

    

添加信息

信息添加后返回到联系人列表界面

转载于:https://www.cnblogs.com/dondre/p/4094633.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IIS内部错误:500之解决方案

将自己很早以前做的一个asp.net网站从自己的笔记本上迁移到公司电脑上&#xff0c;在作好相关配置后&#xff0c;打开网站首页&#xff0c;出现HTTP500错误&#xff0c;上网查了发现这是服务器内部错误。 接着我查看了下系统事件日志信息&#xff0c;发现了错误: 服务器无法加…

AGPM(高级组策略管理)3.0之二操作

续AGPM&#xff08;高级组策略管理 &#xff09;3.0之一部署。1、设置默认AGPM服务器打开组策略管理控制台&#xff08;GPMC.MSC&#xff09;&#xff0c;打开默认的Default Domain Policy进行编辑。打开用户配置、策略、管理模板、Windows 组件、AGPM&#xff0c;进行如下设置…

Linux:串口通信

以前跟着做过VxWorks的开发&#xff0c;主要通信方式是串口&#xff0c;因为底层BSP包已经做好了&#xff0c;串口通信非常简单。后来接触Linux&#xff0c;在一块OK6410上跑Linux串口通信&#xff0c;才发现原来天真的以为甚是简单的串口变得如此的不简单。 #include <ter…

结合netstat和awk命令来统计网络连接数

结合netstat和awk命令来统计网络连接数netstat -n | awk /^tcp/ {state[$NF]} END {for(key in state) print key,"\t",state[key]}会得到类似下面的结果&#xff0c;具体数字会有所不同&#xff1a;LAST_ACK 1SYN_RECV 14ESTABLISHED 79FIN_WAIT1 28FIN_WAIT2 3CLOS…

屏幕实战效果解析:IPS/TFT/AMOLED/SLCD

现在手机市场上&#xff0c;智能手机种类繁多&#xff0c;手机屏幕材质也是五花八门。对于一般消费者来说&#xff0c;一款手机是否值得购买&#xff0c;除了关心它的硬件参数以外&#xff0c;更重要的一点就是看它的屏幕。除了屏幕尺寸以外&#xff0c;影响着大家对该手机的第…

结构体继承自结构体

C Code: /*功能&#xff1a;结构体继承自结构体结论&#xff1a;1. 结构体可以继承自结构体2. 结构体同样有构造函数和析构函数*/#include <iostream>using namespace std;struct MNode{int val;MNode(){val 10;cout<<"MNode(): "<<val<<e…

非对称加密算法(公钥和私钥)

非对称加密算法需要两个密钥来进行加密和解密&#xff0c;这两个秘钥是公开密钥&#xff08;public key&#xff0c;简称公钥&#xff09;和私有密钥&#xff08;private key&#xff0c;简称私钥&#xff09;。 公钥&#xff08;Public Key&#xff09;与私钥&#xff08;Pri…

Linux:定时器

引子&#xff1a;使用OK6410 通过 IMU_EV30 采集 ADIS16405 的数据&#xff0c;采集频率为100Hz&#xff0c;需要10ms的定时器。首先考虑了a POSIX per-process timer&#xff0c;后发现板子负担轻的时候还行&#xff0c;负担重了定时很不精确&#xff0c;最后使用PWM定时器解决…

RHEL5+Postfix+MySql+IMAP+MailDrop+ExtMail(5)

十三、安装Extman-0.2.2<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1、安装及基本配置#tar zxvf extman-0.2.2.tar.gz# mv extman-0.2.2 /var/www/extsuite/extman修改配置文件以符合本例的需要&#xff1a;# vim /var/www…

如何解决Android SDK无法下载Package的问题(.net)

有些用户在安装好Android SDK后&#xff0c;打开Android SDK Manager下载API时一直显示“Done loading packages”却迟迟不能前进&#xff0c;界面显示的Package空空如也。自己也出现了这种情况&#xff0c;于是乎&#xff0c;把自己成功解决此问题的方法分享给大家。 如何解决…

C# 中 for和foreach 性能比较,提高编程性能

From: http://www.cnblogs.com/yzxchoice/archive/2007/12/15/995949.html 在很多情况下for和foreach具有同样的功能,选择for还是foreach很多人可能都是看自己的喜好&#xff0c;本测试试图通过 来真是测试数据来比较他们的执行效率。希望能给大家对他们的时候带来一些帮助。 …

AES与RSA混合加密完整实例

前段时间看到一篇文章讲如何保证API调用时数据的安全性&#xff08;传送门&#xff1a;https://blog.csdn.net/ityouknow/article/details/80603617&#xff09;&#xff0c;文中讲到利用RSA来加密传输AES的秘钥&#xff0c;用AES来加密数据&#xff0c;并提供如下思路&#xf…

Linux: 两个USB摄像头的数据采集问题

引子&#xff1a; 课题需要&#xff0c;同时采集两个摄像头数据&#xff0c;频率不高&#xff0c;但要同时。中间遇到的问题&#xff0c;唉一言难尽啊&#xff01; 为了图省事使用UVC摄像头&#xff0c;但是板子是USB1.1接口的&#xff0c;故挑选兼容USB1.1的UVC驱动的摄像头&…

获取指定日期的常用前后节点(月初月末周一周末等等)

获取指定日期的常用前后节点&#xff08;月初月末周一周末等等&#xff09; 原文:获取指定日期的常用前后节点&#xff08;月初月末周一周末等等&#xff09;注&#xff1a;周节点方面是根据中国习惯&#xff0c;视周一为起&#xff0c;周日为末。 /*-------------------------…

DB2在linux安装

linux下安装DB2的详细步骤第一步下载db2v8.1数据包,IBM网站有了,但是要钱了,呵呵第二步把下载下来的包(名称有可能是:DB2_V81_PE_LNX_32_NLV.tar)放进opt目录第三步用命令解压DB2_V81_PE_LNX_32_NLV.tar如下:linux:~#cd /optlinux:/opt # tar -xvf DB2_V81_PE_LNX_32_NLV.tar第…

封送处理您的数据:利用 COM 和 Windows 2000 的高效传输数据的技术

From: http://blog.csdn.net/zhoujianhei/article/details/1844319 摘要 您所选择的数据传输方式在分布式应用程序中是非常重要的。Windows 2000 提供了几种新的特性&#xff0c;可以更加高效地进行数据传输。轻量级的处理程序使得您能够编写智能代理&#xff0c;它们能够缓存结…