zoukankan      html  css  js  c++  java
  • dismissViewControllerAnimated后 通过completion传值给上一个父视图方法

    视 图firstView和secendView,点击firstView上面的按钮presentviewcontroller出 secendView;secendView上有个按钮,点击按钮dismissViewControllerAnimated,并将某个值传给 firstView,或不直接在firstView里面的viewWillAppear里面调用方法,而是直接通过在 dismissViewControllerAnimated completion里面编辑代码块调用firstView里面的任何方法,该怎么做?

    这个问题其实并不复杂,如果你知道如何使用NSNotificationCenter实现起来还是非常简单的。

    先说一下,secendView在dismissViewControllerAnimated后,如何在进入firstView后,自动调用firstView里面的任何方法
    第一步:在secendView里面,点击按钮时调用一个方法,该方法为:
    -(void)secendAction{
    [self dismissViewControllerAnimated:YES completion:^{
            [[NSNotificationCenter defaultCenter] postNotificationName:@"do" object:self];
        }];

    }
    上面代码是将secendView dismissViewControllerAnimated掉,然后自动注册一个名为do的通知
    注册了这个名为的通知,你就可以在任何.m文件里面通过以下代码调用到了:
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc addObserver:self
               selector:@selector(handleColorChange:)
                   name:@"do"
                 object:nil];
    上面的代码的意思就是,先找到已经注册过的名为do的通知,然后再自动调用handleColorChange去处理,
    所以:
    第二步:在firstView里面的viewWillAppear方法里面写入以下代码:
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc addObserver:self
               selector:@selector(handleColorChange:)
                   name:@"do"
                 object:nil];
    handleColorChange方法为:
    -(void)handleColorChange:(id)sender{
        [self firstView里面方法]

    看明白了吧?在secendView里面我们不直接调用firstView里面的方法,而是通过通知来让firstView自动调用自己里面的某个方法。
    通过通知可以让不同.m文件之间进行方法和参数的传递

    ok就下来说一下如何在dismissViewControllerAnimated后将secendView里面的值传递给firstView
    第一步:在secendView里面,点击按钮时调用一个方法,该方法为:
    -(void)secendAction{
    [self dismissViewControllerAnimated:YES completion:^{
            [tools showToast:@"图片信息提交成功" withTime:1500 withPosition:iToastGravityCenter];
            [[NSNotificationCenter defaultCenter] postNotificationName:@"do" object:self userInfo:dictionary];
        }]; 

    }
    userInfo:dictionary里面的dictionary就是你要传递的字典对象的值
    第二步:在firstView里面的viewWillAppear方法里面写入以下代码:
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc addObserver:self
               selector:@selector(handleColorChange:)
                   name:@"do"
                 object:nil];
    handleColorChange方法为:
    -(void)handleColorChange:(NSNotification*)sender{
    NSLog(@"%@",sender);
        [self firstView里面方法]

    -(void)handleColorChange:(NSNotification*)sender里面的sender就是你在secendView里面所传递的字典对象的值,简单吧?!

  • 相关阅读:
    HDU3336 Count the string —— KMP next数组
    CodeForces
    51Nod 1627 瞬间移动 —— 组合数学
    51Nod 1158 全是1的最大子矩阵 —— 预处理 + 暴力枚举 or 单调栈
    51Nod 1225 余数之和 —— 分区枚举
    51Nod 1084 矩阵取数问题 V2 —— 最小费用最大流 or 多线程DP
    51Nod 机器人走方格 V3 —— 卡特兰数、Lucas定理
    51Nod XOR key —— 区间最大异或值 可持久化字典树
    HDU4825 Xor Sum —— Trie树
    51Nod 1515 明辨是非 —— 并查集 + 启发式合并
  • 原文地址:https://www.cnblogs.com/allanliu/p/4778361.html
Copyright © 2011-2022 走看看