ios两视图间委托(delegate)传值

现有两个视图(ViewController,ViewController1),从ViewController中带参数跳转到ViewController1,在ViewController1选中数据后带有效数据后退到ViewController中,委托实现上述功能。

项目:点击下载

一、ViewController主要代码

// 按钮点击事件
-(IBAction)clickSearchBtn:(id)sender {

    [[[UIApplication sharedApplication] keyWindow] endEditing:YES];

    ViewController1 *_viewController = [[[ViewController1 alloc] init] autorelease];
    _viewController.delegate = self;
    _viewController.transText = self.textField.text;

    [self.navigationController pushViewController:_viewController animated:YES];
}

// ViewController1Delegate 的代理方法
-(void)selectData:(NSString*)text{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        [self.listArray removeAllObjects];
        for (int i=0; i<5; i++) {
            [self.listArray addObject:[NSString stringWithFormat:@"第%d行数据:%@_%d",i+1,text,arc4random_uniform(100)]];
        }
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.dataTableView reloadData];
        });
    });
}

二、ViewController1主要代码

// ViewController1.h
// delegate写在#import之前,否则可能会Delegate Cannot find protocol declaration
@protocol ViewController1Delegate;
@protocol ViewController1Delegate <NSObject>

@optional
-(void)selectData:(NSString*)text;
@end

// ViewController1.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    if ([self.delegate respondsToSelector:@selector(selectData:)]) {

        //通过委托协议传值
        [self.delegate selectData:[self.listArray objectAtIndex:indexPath.row]];
        [self.navigationController popViewControllerAnimated:YES];
    }
}

三、效果图

  

时间: 2024-12-21 04:14:28

ios两视图间委托(delegate)传值的相关文章

iOS视图控制器之间delegate传值教程

之前在StackOverFlow上看到一篇讲传值(segue传值和delegate传值)的文章,感觉讲的很清晰,就将delegate部分翻译了一下,有兴趣可以看看. 原文: http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers 译文: 为了从ViewControllerB往回传值到ViewControllerA,我们需要使用协议(Protocols)和代理(Delegates). 为了实现

ios delegate 代理模式 观察者模式 不同视图间的通信

delegate,在ios中比比皆是,NSURLConnection(网络请求有),tableView, connectionView,等系统自带 的常见代理.甚至,自己写代码的时候,随意间敲打出了protocol,根据需求,就出来了个delegate.其实也就是观察者模式的具体应用.基本的observer.一样的思想,就是创建一个抽象方法,到具体的视图控制器中才去实现.最常见的做法是:创建单例模式,然后,调用对象,设置代理对象,写具体的实现. NSNotification通知信号虽然也能达到同

iOS 页面间几种传值方式(属性,代理,block,单例,通知)

iOS 页面间几种传值方式(属性,代理,block,单例,通知) 姜糖水 2015-05-03 52 阅读 iOS 移动开发 第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视图控制器的部分信息 例如:第一个界面中的lable显示第二个界面textField中的文本 这就需要使用代理传值 页面间传值有八大传值方式,下面我们就简单介绍下页面间常用的五

iOS 页面间几种传值方式(属性,代理,block,单例,通知)

第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视图控制器的部分信息 例如:第一个界面中的lable显示第二个界面textField中的文本 这就需要使用代理传值 页面间传值有八大传值方式,下面我们就简单介绍下页面间常用的五种传值方式: (一)属性传值 第二个界面中的lable显示第一个界面textField中的文本 首先我们建立一个RootVie

不同视图间的跳转方式

从一个视图控制器切换到另一个视图控制器的几种方式 1,模态(modal)画面的显示方法: 例如iphone通讯录管理程序中,追加新的通讯纪录时,就是使用这种模态画面 例:点击一个按钮,进入另一个界面 - (void)goForward { ModalViewController * modalView = [[ModalViewControlleralloc]init]; modalView.modalTransitionStyle = UIModalTransitionStyleFlipHor

组件接口(API)设计指南[3]-委托(delegate)和数据源协议(data-source protocols)

*返回目录阅读其他章节: http://blog.csdn.net/cuibo1123/article/details/39894477 委托(delegate)和数据源协议(data-source protocols) 委托协议是一个非常好的设计,它能让你用简单灵活的方式去实现MVC模式,并能增强松散耦合以及养成良好的API设计习惯. 这里是MGTileMenu的委托协议. 我们几乎可以在任何组件中利用经典的委托(delegate)和数据源协议(data-source protocols).如

深入了解iOS中的VC切换的传值方式

由于上次面试中有提到相关内容,所以这次我专门深入研究了iOS的几种方式: 首先把所有的传值方式都列出来,如果有遗漏,请指正 首先列出iOS中使用的传值方式: init 传值(即在创建VC的时候就对响应的参数进行设置) property 传值(即属性赋值) Router 传值(这个在OC中被使用,因为作者没有写Swift版本,所以先开个坑,估计我会填坑) Delegate 传值(通过协议和代理传值) 闭包(block)传值 (通过swift中的闭包,类似于OC中的block传值) Notifica

android:两个应用之间如何传值之activity

两个应用之间如何传值,其实这个标题太水了,专业的说法是"两个进程间如何传值",什么?!还不够专业,好吧,你淫了!"进程间通信"其实更专业,这回你总满意了吧!顺带说一下,简写成IPC:Inter-Process Communication. 兄弟们,如果你们从搜索引擎或者其他途径找到这篇文章的话,说明你的Android技术已经提升到一个很高的层次了哦,嘿嘿-为什么这么说呢?因为无论哪个平台,线程跟进程都是绝对的重点跟难点. 本文说的进程间传值只是进程间通信的一个特例,

iOS.常用设计模式.02.委托模式

WTDelegate #import <Foundation/Foundation.h> @protocol WTDelegate <NSObject> @required - (void)sleep; - (void)eat; - (void)work; @end WTPhilosopher.h #import <Foundation/Foundation.h> #import "WTDelegate.h" @interface WTPhiloso