美文网首页
iOS开发通讯录添加联系人界面之间传值(代理传值)

iOS开发通讯录添加联系人界面之间传值(代理传值)

作者: zhake | 来源:发表于2019-07-10 22:24 被阅读0次

最近课程设计写了个iOS通讯录,功能很简单,就是增删改查,再加上排序.
添加联系人后使用的是使用的代理传值,将联系人信息传到联系人列表.
添加联系人页面为AddViewController,联系人列表为ViewController
代理传值共有六个步骤:
1、声明协议(在AddViewController.h)

#import <UIKit/UIKit.h>
#pragma mark -- 第一步声明协议与方法:
@protocol WxDelegate <NSObject>
- (void)WxDelegate:(NSMutableDictionary *)myDic;
@end
@interface AddViewController : UIViewController

2、声明代理变量(在AddViewController.h)

#pragma mark -- 第二部声明代理人属性:
@property(nonatomic, copy)NSMutableArray *myDic;
@property(nonatomic, assign)id<WxDelegate>delegate;

3、设置代理(在ViewController里面点击添加联系人,所以在ViewController.m中设置)

- (void)addAction:(UIBarButtonItem *)sender
{
    AddViewController *addContactVC = [AddViewController new];
    addContactVC.delegate = self;
    UINavigationController *addContactNC = [[UINavigationController alloc] initWithRootViewController:addContactVC];
    [self presentViewController:addContactNC animated:YES completion:nil];
}

4、通过代理变量调用协议方法(让代理者开始执行协议,在AddViewController.m)

- (void)saveAction:(UIBarButtonItem *)sender
{
    Node *head = [Node new];
    Node *newNode = head;
    if(nil == newNode) {
        printf("失败");
        exit(1);
    }
    // 获取输入内容
    newNode.phone = self.textField3.text;
    newNode.introduce = self.textField2.text;
    newNode.name = self.textField.text;
    NSMutableDictionary *dic = [NSMutableDictionary dictionary];
    // 获取输入内容
    [dic setObject:newNode.phone forKey:@"phone"];
    [dic setObject:newNode.introduce forKey:@"portrait"];
    [dic setObject:newNode.name forKey:@"name"];
    [self dismissViewControllerAnimated:YES completion:nil];
    [self.delegate WxDelegate:dic];
    [self.navigationController popViewControllerAnimated:YES];
}

5、在代理(ViewController.m)中遵守协议

@interface ViewController ()
<UITableViewDelegate,UITableViewDataSource,
UISearchBarDelegate,UISearchDisplayDelegate,WxDelegate>

6、代理实现协议方法(在ViewController.m里面)

- (void)WxDelegate:(NSMutableDictionary *)myDic
{
 ContactModel *model = [[ContactModel alloc]initWithDic:myDic];
 [self.dataArr addObject:model];
 _rowArr = [ContactDataHelper getFriendListDataBy:self.dataArr];
 _sectionArr = [ContactDataHelper getFriendListSectionBy:[_rowArr mutableCopy]];
 //更新首页视图:
 [self.tableView reloadData];
}

这样就可以把联系人信息传过去了

相关文章

  • iOS开发通讯录添加联系人界面之间传值(代理传值)

    最近课程设计写了个iOS通讯录,功能很简单,就是增删改查,再加上排序.添加联系人后使用的是使用的代理传值,将联系人...

  • 芒果iOS开发之界面传值方式-数组回传值

    在iOS开发过程中经常会用到界面之间的传值,提到传值大家立马就能说出来很多种方式:比如,最简单的属性传值;还有代理...

  • iOS • 记——代理传值和Block传值的简单对比

    在iOS开发中,两个界面之间的传值是开发中经常会用到,给需要传值的对象,直接定义属性就能传值。传值分为两种,顺传和...

  • iOS中界面传值的几种方式

    1.属性传值 属性传值适用于顺序传值,从前面的界面传值给后面的界面。 2.代理传值 用代理的方式实现界面间传值稍微...

  • iOS 常用传值方式

    总结 iOS 日常开发中的几种常用传值方式:正向传值代理传值block传值通知传值单例 文章代码:https://...

  • ios常用的三种传值方式

    iOS中有多种方案可以实现页面之间的传值,例如:属性传值、代理传值、block传值、单例传值...。常用的三种传值...

  • 几种iOS界面之间的传值方式

    几种iOS界面之间的传值方式 一.正向传值方式 (BOOL)application:(UIApplication ...

  • iOS的五种传值

    前言 iOS常见的五种传值分别为属性传值,通知传值,代理传值,block传值,单例传值 属性传值 用于正向传值,简...

  • Swift界面传值

    Swift中界面传值的方法 主要有三种 1.代理传值2.闭包传值(即OC中的Block) 属性传值 代理传值 F...

  • swift- 通讯录demo

    swift 创建的通讯录,实现了联系人的添加 删除 和查看详情.联系人使用的假数据.添加使用了闭包传值,传一个 m...

网友评论

      本文标题:iOS开发通讯录添加联系人界面之间传值(代理传值)

      本文链接:https://www.haomeiwen.com/subject/plikkctx.html