博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发UI篇—实现一个私人通讯录小应用(二)
阅读量:4680 次
发布时间:2019-06-09

本文共 10976 字,大约阅读时间需要 36 分钟。

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)buttonIndex11 {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)textChange16 {17     //判断,如果两个文本框的内容都改变(有值)的时候,添加按钮变成可交互的18     self.addBtn.enabled=(self.nameFeild.text.length>0&&self.phoneFeild.text.length>0);19     NSLog(@"通知调用的事件");20 }21 22 //临终遗言23 -(void)dealloc24 {25     [[NSNotificationCenter defaultCenter] removeObserver:self];26 }

 

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

TXContatcsViewController.m文件

1 //  Created by 鑫 on 14-10-21.  2 //  Copyright (c) 2014年 梁镋鑫. All rights reserved.  3 //  4   5 #import "TXContactsViewController.h"  6 #import "TXAddViewController.h"  7 #import "TXContact.h"  8 #import "TXEditViewController.h"  9 #import "TXContactCell.h" 10  11 @interface TXContactsViewController ()
12 - (IBAction)logout:(id)sender; 13 @property (nonatomic, strong) NSMutableArray *contacts; 14 @end 15 16 @implementation TXContactsViewController 17 18 - (id)initWithStyle:(UITableViewStyle)style 19 { 20 self = [super initWithStyle:style]; 21 if (self) { 22 // Custom initialization 23 } 24 return self; 25 } 26 - (NSMutableArray *)contacts 27 { 28 if (_contacts == nil) { 29 _contacts = [NSMutableArray array]; 30 } 31 return _contacts; 32 } 33 34 - (void)viewDidLoad 35 { 36 [super viewDidLoad]; 37 self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 38 // self.tableView.rowHeight = 70; 39 40 } 41 42 - (void)didReceiveMemoryWarning 43 { 44 [super didReceiveMemoryWarning]; 45 // Dispose of any resources that can be recreated. 46 } 47 48 #pragma mark - Table view data source 49 50 51 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 52 { 53 #warning Incomplete method implementation. 54 // Return the number of rows in the section. 55 return self.contacts.count; 56 } 57 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 58 { 59 // 1.创建cell 60 TXContactCell *cell = [TXContactCell cellWithTableView:tableView]; 61 62 // 2.设置cell的数据 63 cell.contact = self.contacts[indexPath.row]; 64 65 66 67 return cell; 68 } 69 70 /** 71 * 注销 72 * 73 * @param sender <#sender description#> 74 */ 75 76 - (IBAction)logout:(id)sender { 77 78 //框框从底部跳出来 79 UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"确定注销" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"确定" otherButtonTitles:nil, nil]; 80 [sheet showInView:self.view]; 81 82 } 83 84 #pragma mark --actionSheet的代理方法 85 -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 86 { 87 // if (buttonIndex ==0) { 88 // //出栈 89 // [self.navigationController popViewControllerAnimated:YES ]; 90 // } 91 if (buttonIndex !=0) return; 92 //出栈 93 [self.navigationController popViewControllerAnimated:YES ]; 94 95 96 } 97 /** 98 * 执行跳转下个控制器之前会调用下面这个方法 99 */100 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender101 {102 id vc = segue.destinationViewController;103 104 if ([vc isKindOfClass:[TXAddViewController class]]) { // 如果是跳转到添加联系人的控制器105 // 设置下一个控制器(添加联系人的控制器)的代理106 TXAddViewController *addVc = vc;107 addVc.delegate = self;108 } else if ([vc isKindOfClass:[TXEditViewController class]]) { // 如果是跳转到查看(编辑)联系人的控制器109 TXEditViewController *editVc = vc;110 // 取得选中的那行111 NSIndexPath *path = [self.tableView indexPathForSelectedRow];112 //传递数据给editVC113 114 editVc.contact = self.contacts[path.row];115 editVc.delegate = self;116 }117 118 }119 120 #pragma mark - TXAddViewController的代理方法121 - (void)addViewController:(TXAddViewController *)addVc didAddContact:(TXContact *)contact122 {123 // 1.添加模型数据124 [self.contacts addObject:contact];125 126 // 2.刷新表格127 [self.tableView reloadData];128 }129 #pragma mark - TXEditViewController的代理方法130 - (void)editViewController:(TXEditViewController *)editVc didSaveContact:(TXContact *)contact131 {132 [self.tableView reloadData];133 }134 @end

 

TXAddViewController.h文件

1 #import 
2 //包括TXContact这个模型 3 @class TXAddViewController, TXContact; 4 5 @protocol TXAddViewControllerDelegate
6 7 @optional 8 //- (void)addViewController:(TXAddViewController *)addVc didAddContactWithName:(NSString *)name phone:(NSString *)phone;你当我代理你就能拿到我那两个属性值,如果参数多,不好用,可用模型,以下使用模型的 9 - (void)addViewController:(TXAddViewController *)addVc didAddContact:(TXContact *)contact;10 @end11 12 @interface TXAddViewController : UIViewController13 @property (nonatomic, weak) id
delegate;14 @end

 

TXAddViewController.m文件

1 //  Created by 鑫 on 14-10-21. 2 //  Copyright (c) 2014年 梁镋鑫. All rights reserved. 3 // 4  5 #import "TXAddViewController.h" 6 #import "TXContact.h" 7 @interface TXAddViewController () 8 //为了封装性不要把控件属性放到.h文件 9 @property (weak, nonatomic) IBOutlet UITextField *phoneField;10 @property (weak, nonatomic) IBOutlet UITextField *nameField;11 @property (weak, nonatomic) IBOutlet UIButton *addBtn;12 - (IBAction)add;13 @end14 15 @implementation TXAddViewController16 17 - (void)viewDidLoad18 {19     [super viewDidLoad];20     21     // 监听通知22     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.nameField];23     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.phoneField];24     25     // 退出键盘26     //    [self.nameField resignFirstResponder];27     //    [self.view endEditing:YES];28 }29 30 /**31  *  控制器的view完全显示的时候调用32  */33 - (void)viewDidAppear:(BOOL)animated34 {35     [super viewDidAppear:animated];36     37     // 让姓名文本框成为第一响应者(叫出键盘)38     [self.nameField becomeFirstResponder];39 }40 41 - (void)dealloc42 {43     [[NSNotificationCenter defaultCenter] removeObserver:self];44 }45 46 /**47  *  文本框的文字发生改变的时候调用48  */49 - (void)textChange50 {51     self.addBtn.enabled = (self.nameField.text.length && self.phoneField.text.length);52 }53 54 /**55  *  添加56  */57 - (IBAction)add {58     // 1.关闭当前控制器59     [self.navigationController popViewControllerAnimated:YES];60     61     // 2.传递数据给上一个控制器(TXContactsViewController)62     // 2.通知代理63     if ([self.delegate respondsToSelector:@selector(addViewController:didAddContact:)]) {
//代理还可以传值64 TXContact *contact = [[TXContact alloc] init];65 contact.name = self.nameField.text;66 contact.phone = self.phoneField.text;67 [self.delegate addViewController:self didAddContact:contact];68 }69 }70 71 @end

TXEditViewController.h文件

1 //  Created by 鑫 on 14-10-21. 2 //  Copyright (c) 2014年 梁镋鑫. All rights reserved. 3 // 4  5 #import 
6 @class TXContact, TXEditViewController; 7 8 @protocol TXEditViewControllerDelegate
9 10 @optional11 - (void)editViewController:(TXEditViewController *)editVc didSaveContact:(TXContact *)contact;12 13 @end14 15 @interface TXEditViewController : UIViewController16 //别人传一个模型给你17 @property (nonatomic, strong) TXContact *contact;18 19 @property (nonatomic, weak) id
delegate;20 @end

 

TXEditViewController.m文件

 

1 //  Copyright (c) 2014年 梁镋鑫. All rights reserved. 2 // 3  4 #import "TXEditViewController.h" 5 #import "TXContact.h" 6 @interface TXEditViewController () 7 @property (weak, nonatomic) IBOutlet UITextField *nameField; 8 @property (weak, nonatomic) IBOutlet UIButton *saveBtn; 9 @property (weak, nonatomic) IBOutlet UITextField *phoneField;10 - (IBAction)edit:(UIBarButtonItem *)item;11 12 - (IBAction)save;13 14 15 @end16 17 @implementation TXEditViewController18 - (void)viewDidLoad19 {20     [super viewDidLoad];21     22     // 设置数据23     self.nameField.text = self.contact.name;24     self.phoneField.text = self.contact.phone;25     26     // 监听通知27     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.nameField];28     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.phoneField];29 }30 31 - (void)dealloc32 {33     [[NSNotificationCenter defaultCenter] removeObserver:self];34 }35 36 /**37  *  文本框的文字发生改变的时候调用38  */39 - (void)textChange40 {41     self.saveBtn.enabled = (self.nameField.text.length && self.phoneField.text.length);42 }43 44 - (IBAction)edit:(UIBarButtonItem *)item {45     if (self.nameField.enabled) { // 点击的是"取消"46         self.nameField.enabled = NO;47         self.phoneField.enabled = NO;48         [self.view endEditing:YES];49         self.saveBtn.hidden = YES;50         51         item.title = @"编辑";52         53         // 还原回原来的数据54         self.nameField.text = self.contact.name;55         self.phoneField.text = self.contact.phone;56     } else { // 点击的是"编辑"57         self.nameField.enabled = YES;58         self.phoneField.enabled = YES;59         [self.phoneField becomeFirstResponder];60         self.saveBtn.hidden = NO;61         62         item.title = @"取消";63     }64 }65 66 /**67  *  保存68  */69 - (IBAction)save {70     // 1.关闭页面71     [self.navigationController popViewControllerAnimated:YES];72     73     // 2.通知代理74     if ([self.delegate respondsToSelector:@selector(editViewController:didSaveContact:)]) {75         // 更新模型数据76         self.contact.name = self.nameField.text;77         self.contact.phone = self.phoneField.text;78         [self.delegate editViewController:self didSaveContact:self.contact];79     }80 }81 @end

 

二、效果

注销的弹窗效果

    

添加信息

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

 

转载于:https://www.cnblogs.com/asd5551680/p/4070040.html

你可能感兴趣的文章
第一讲 一个简单的Qt程序分析
查看>>
Centos 6.5下的OPENJDK卸载和SUN的JDK安装、环境变量配置
查看>>
poj 1979 Red and Black(dfs)
查看>>
【.Net基础03】HttpWebRequest模拟浏览器登陆
查看>>
UML-画类图与交互图的顺序
查看>>
杭电1060
查看>>
webdriver test1
查看>>
RFC端口号定义
查看>>
Unity Technologies-提供全面的技术支持服务
查看>>
Console-算法[for,if,break]-五个好朋友分苹果
查看>>
ylb: SQL表的高级查询-子查询
查看>>
import 用法
查看>>
6月7 考试系统
查看>>
mysql 基本操作
查看>>
HTML5 and Websocket
查看>>
zTree async 动态参数处理
查看>>
Oracle学习之常见错误整理
查看>>
Android实例-处理隐藏输入法后不再显示问题(XE8+小米2)
查看>>
字符串反转(10)
查看>>
HTC Sensation G14开盒
查看>>