`

IOS之UIViewController执行返回操作并传递参数值的两种方式

 
阅读更多

举个例子,第一个page(即UIViewController)显示天气,需要对所在地进行设置,这就需要跳转到第二个page,选择好所在地之后,将所在地信息(即返回参数)传回第一个page。

第一种:通过Delegate的Protocol

1.新建PassValueDelegate.h

#import <Foundation/Foundation.h>

@protocol PassValueDelegate <NSObject>

-(void)passValue:(NSString *)value;

@end

 2.在需要得到返回值的UIViewController.h添加对PassValueDelegate的实现

@interface IkrboyViewController6 : UIViewController<PassValueDelegate>

 3.在UIViewController.m实现-(void)passValue的方法,即处理得到的返回值的事件

-(void)passValue:(NSString *)value{
    NSLog(@"get backcall value=%@",value);
}

 4.在下一个UIViewController.h(即为上一个UIViewController提供返回数据)添加Delegate的参数

@property(nonatomic,assign) NSObject<PassValueDelegate> *delegate;

 5.在上一个UIViewController跳转到下一个UIViewController之前添加代码

//设置第二个窗口中的delegate为第一个窗口的self
    newViewController.delegate = self;

 6.下一个UIViewController返回到上一个UIViewController的代码

self dismissViewControllerAnimated:YES completion:^{
            //通过委托协议传值
            [self.delegate passValue:@"ululong"];
    }];

 

第二种:绑定Notification,利用userInfo参数

 1.在第一个UIViewController的viewDidLoad添加注册RegisterCompletionNotification代码

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(registerCompletion:)
                                                 name:@"RegisterCompletionNotification"
                                               object:nil];

 2.别忘了解除·Notification

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

3.实现registCompletion方法

-(void)registerCompletion:(NSNotification*)notification {
    //接受notification的userInfo,可以把参数存进此变量
    NSDictionary *theData = [notification userInfo];
    NSString *username = [theData objectForKey:@"username"];
    
    NSLog(@"username = %@",username);
}

 4.在下一个UIViewController的返回操作中添加代码

NSDictionary *dataDict = [NSDictionary dictionaryWithObject:@"MissA"
                                                         forKey:@"username"];
    [[NSNotificationCenter defaultCenter]
     postNotificationName:@"RegisterCompletionNotification"
     object:nil
     userInfo:dataDict];

    
    [self dismissViewControllerAnimated:YES completion:nil];

 

分享到:
评论

相关推荐

    IOS学习之UiViewController带值跳转以及协议的实现

    总结来说,通过上述两种方式,我们可以实现UIViewController间的有效数据传递和通信。在实际开发中,应根据项目需求和场景选择合适的方法。同时,注意内存管理和避免强引用循环,确保应用的稳定性和性能。

    iOS5 UIViewController 新特性

    1. **Storyboards**:iOS5引入了Storyboard的概念,这是一种全新的界面设计方式,允许开发者在一个单一的文件中组织多个UIViewController及其间的导航关系。通过Storyboard,可以方便地定义Segue(过渡)来实现...

    ios实现viewcontroller切换传值的三种方法

    这里我们将详细探讨三种在iOS中实现ViewController切换并传值的方法:代理(Delegation)、键值编码(Key-Value Coding,KVC)和封装在自定义初始化方法中的参数。 **1. 代理(Delegation)** 代理是iOS开发中最...

    ios 最全传值方式

    Block是一种强大的代码块,可以作为参数传递,也可以作为返回值。在iOS开发中,Block常用于回调或者异步操作。例如,在网络请求中,我们经常用Block来处理数据请求的完成或失败回调。Block的优点是可以直接访问上下...

    iOS 多种传值方式

    本篇文章将详细探讨两种主要的传值方式:正向传值和反向传值,并通过具体实例解析它们的实现方法。 **一、正向传值** 1. **单例模式**: 单例是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点。在...

    ios的视图之间使用Delegate传递数据

    在iOS开发中,数据传递是应用之间、视图之间交互的关键环节。`Delegate`协议是一种常用的方法,用于在不同对象间传递数据和控制流程。本文将深入探讨如何在iOS的视图之间使用Delegate来实现数据的传递,以及相关源码...

    iOS swift3.0 导航页的相互传值

    在iOS应用开发中,Swift 3.0 是一种强大的编程语言,用于构建用户界面和实现应用程序的功能。在iOS应用中,导航控制器(UINavigationController)是一个...理解并熟练运用这两种方法,将有助于提升你的iOS开发能力。

    ios-弹出视图.zip

    本资源"ios-弹出视图.zip"提供了一种实现自定义弹出视图的方法,并涵盖了两种不同的值传递方式,方便开发者根据需求进行扩展和定制。我们将探讨这个话题,详细介绍如何创建和管理自定义弹出视图以及值传递的策略。 ...

    利用delegate进行ViewController之间的参数传递

    委托是一种对象间通信的方式,一个对象(委托者)持有另一个对象(委托对象)的引用,通过这个引用调用委托对象的方法来传递信息或执行某些操作。在iOS开发中,我们通常在UIViewController的子类之间设置委托关系,...

    ios-传值.zip

    使用Block进行数据传递,可以直接将Block作为参数传递给方法,当需要返回结果时,直接在Block内执行。这种方式更加灵活,不需要显式定义接口,适合一次性使用的回调。例如,UIWebView的`...

    iOS 代理传值简单demo

    总结来说,代理在iOS开发中扮演着重要角色,它提供了一种灵活、可扩展的方式来处理对象间的通信。通过学习和实践这个“iOS 代理传值简单demo”,开发者可以更好地掌握如何在应用中有效地使用代理协议进行数据传递。

    iOS八种传值

    以下将详细介绍标题和描述中提到的八种常见的iOS传值方式: 1. **属性赋值(Property Assignment)** 当两个对象之间存在强引用关系时,可以直接通过属性赋值来传递数据。例如,一个UIViewController的属性可以被...

    iOSm界面跳转和参数传递之presentViewController与dismissViewControllerAnimated

    例如,当用户在设置视图控制器中完成操作后,可以通过以下方式返回主视图: ```swift self.dismiss(animated: true) { // 完成回调处理 } ``` 在界面跳转的过程中,参数传递是至关重要的。有几种方式可以在视图...

    ios-swift传值.zip

    本压缩包“ios-swift传值.zip”聚焦于Swift中的值传递机制,特别关注了在iOS应用开发中常见的三种传值方式。对于初学者来说,理解并熟练掌握这些方法对于提升编程能力至关重要。以下是关于Swift中值传递的详细解析:...

    斯坦福ios7公开课纸牌源码(stanford ios7)

    8. **Interface Builder与Programmatic UI**:源码可能会结合Interface Builder进行界面设计,也可能完全通过代码创建UI,这展示了两种不同的开发方式及其优缺点。 9. **测试与调试**:源码中可能包含单元测试...

    ios 视图间Block传值

    在协议中,我们定义了一个泛型类型的`completionBlock`,它接受一个类型为`DataType`的参数并返回Void。这样,我们就可以在任何需要传递数据的视图中实现这个协议,并根据具体的数据类型来设置Block。 接下来,在...

    ios-界面传值.zip

    本教程将探讨两种常见的数据传递方式:属性传值和代理传值,这两种方法在苹果的iOS SDK中广泛使用,特别是涉及到文本输入的情景。下面我们将详细讨论这两种技术。 ### 1. 属性传值 (Property Passing) 属性传值是...

    iOS protocol的简单例子源码

    在iOS开发中,Protocol(协议)是一种非常重要的概念,它类似于其他编程语言中的接口或协定。Protocol定义了一组方法,但并不实现它们,而是由遵循该协议的类来实现。在本示例“iOS protocol的简单例子源码”中,...

    IOS页面传值

    本文将详细介绍如何在iOS应用中实现页面之间的值传递,主要关注Objective-C和Swift两种语言的不同实现方法。 1. **浅谈页面传值** 页面传值在iOS开发中扮演着重要角色,它可以是简单的字符串、数字,也可以是复杂...

    iOS Block 界面传值

    在iOS开发中,Block是一种强大的特性,用于定义代码块或者说是可重用的代码段,可以作为参数传递,也可以作为返回值。它在界面传值和处理事件响应方面发挥着重要作用。本文将深入探讨iOS Block的基本使用,以及如何...

Global site tag (gtag.js) - Google Analytics