通知模式实现两个textField传值及模态视图——iOS开发



通知模式实现两个textField传值及模态视图——iOS开发

利用通知模式,实现两个不同界面的textField之间的传值,在界面二输入字符,传值到前一界面的textField。

界面的切换,这里临时先用模态视图实现。(重点在传值。所以没纠结设计界面排版。丑了点大家见谅)

大家不要看代码看上去好像挺多。由于我没使用storyboard/xib,是代码实现布局,所以通知和模态视图切换的代码非常少~



实现效果:

点击下一页按钮,进入界面二:

在textField处输入字符串:

点击返回按钮,回到界面一。此时界面一的textField处也有字符串



代码部分:





AppDelegate.m


#import "AppDelegate.h"
#import "ViewController1.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

    ViewController1 *vc1 = [[ViewController1 alloc] init];
    self.window.rootViewController = vc1;

    return YES;
}


ViewController1.m


#import "ViewController1.h"
#import "ViewController2.h"

@interface ViewController1 ()
{
    UITextField *text1;
}
@end

@implementation ViewController1

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor greenColor];

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 100, 50)];
    label.text = @"界面一";
    [self.view addSubview:label];

    text1 = [[UITextField alloc] initWithFrame:CGRectMake(50, 150, 100, 50)];
    text1.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:text1];

    UIButton *button1 = [[UIButton alloc] initWithFrame:CGRectMake(50, 250, 100, 50)];
    [button1 addTarget:self action:@selector(pushButtonAction:) forControlEvents:UIControlEventTouchUpInside];
    [button1 setTitle:@"下一页" forState:UIControlStateNormal];
    button1.backgroundColor = [UIColor blackColor];
    [self.view addSubview:button1];

//    注冊观察者
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(returnAction:) name:@"chuanzhi" object:nil];

    // Do any additional setup after loading the view.
}

- (void)returnAction:(NSNotification *)text {
    text1.text = text.userInfo[@"returnInfo"];
}

- (void)pushButtonAction:(UIButton *)btn {
    ViewController2 *vc2 = [[ViewController2 alloc] init];
    vc2.modalPresentationStyle = UIModalPresentationFullScreen;  //切换效果
    [self presentViewController:vc2 animated:YES completion:nil];
}


ViewController2.m


#import "ViewController2.h"

@interface ViewController2 ()
{
    UITextField *text2;
}
@end

@implementation ViewController2

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor blueColor];

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 100, 50)];
    label.text = @"界面二";
    [self.view addSubview:label];

    text2 = [[UITextField alloc] initWithFrame:CGRectMake(50, 150, 100, 50)];
    text2.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:text2];

    UIButton *button2 = [[UIButton alloc] initWithFrame:CGRectMake(50, 250, 100, 50)];
    [button2 addTarget:self action:@selector(returnButtonAction:) forControlEvents:UIControlEventTouchUpInside];
    [button2 setTitle:@"返回" forState:UIControlStateNormal];
    button2.backgroundColor = [UIColor blackColor];
    [self.view addSubview:button2];

    // Do any additional setup after loading the view.
}

- (void)returnButtonAction:(UIButton *)btn {
    NSDictionary *dic = @{@"returnInfo" : self->text2.text};
    NSNotification *notification = [NSNotification notificationWithName:@"chuangzhi" object:nil userInfo:dic];
    [[NSNotificationCenter defaultCenter] postNotification:notification];

    [self dismissViewControllerAnimated:NO completion:nil];
}
时间: 2024-07-31 14:26:59

通知模式实现两个textField传值及模态视图——iOS开发的相关文章

Objective-C(十九、通知-消息发送模式之一)——iOS开发基础

结合之前的学习笔记以及参考<Objective-C编程全解(第三版)>,对Objective-C知识点进行梳理总结.知识点一直在变,只是作为参考,以苹果官方文档为准~ 十九.通知-消息发送模式之一 1.几个基本概念 (1)通知:在面向对象的程序中,有时需要将发生的时间通知给多个对象的消息发送模式: (2)通知中心:期望取得通知的对象预先向通知中心注册期望取得的通知: (3)发送:某对象向通知中心发送消息发送请求,只有注册过该通知单额对象,都可获得通知中心推送的消息: (4)观察者:消息发送目标

【iOS开发-14】UIView的属性,父视图和子视图的层级操作,子视图的自适应模式,外加一个定时器

(1)UIView视图frame的设置,四个参数,前2个确定位置,后2个确定大小. (2)UIView的内容模式contentMode,和在UIImage中说的是一样的,而且在UIImage中展示更容易理解. (3)UIView最重要的就是父视图和子视图之间的关系,以及父视图操作子视图(增加一个子视图,把一个子视图放到最下面最上面.交换两个子视图的加载顺序等等) (4)还有一个重要的是,父视图如果发生变化,子视图怎么自动调整布局:先让父视图允许子视图干这个事,即把父视图的属性autoresize

iOS开发- 界面传值(1)-通知模式(广播)

之后的几篇博客, 记录下不同界面间传值的常用办法. 这篇文章记录广播的方式. iOS的设计模式中,通知模式也是其中重要的模式之一,Notification直译为通知,其实本人觉得叫做广播模式更为贴切.它的作用就是一个对象对多个对象的同步操作.用法很简单,一个对象发出一个广播,需要收听的听众就先注册一下,然后选定频道,完了就可以收听广播的内容了. 但是要注意一点, 在收听之前, 一定要先注册. 不然发送的广播接受不到, 也就是值改变了, 不会做出响应. 下面是一个简单的demo, 效果如下: 第一

iOS中block用法之两个界面传值问题

Block的使用有很多方面,其中传值只是它的一小部分,但是很常用更实用,下面介绍Block在两个界面之间的传值用法: 先说一下思想: 首先,创建两个视图控制器,在第一个视图控制器中创建一个Label和一个Button,其中Label是为了显示第二个视图控制器传过来的字符串, Button是为了push到第二个界面. 第二个界面的只创建一个TextField,是为了输入文字,当输入文字并且返回第一个界面的时候(第二个视图将要消失的时候),就将这个 TextFiled中的文字传给第一个界面并且显示在

探究Repository模式的两种写法与疑惑

现如今DDD越来越流行,园子里漫天都是介绍关于它的文章.说到DDD就不能不提Repository模式了,有的地方也叫它仓储模式. 很多时候我们对Repository都还停留在Copy然后使用的阶段, 我注意到Repository模式有两种流行的设计方式. 今天我就是想跟大家讨论下这两种设计方式之间的区别,同时弄清楚哪种方式更合理(无需纠结代码细节),见下图: 左右两边代码比较: 1.左边的Repository代码在实际使用中是最常见的,右边的使用更少一些. 2.左边代码的更难理解一些,右边的代码

win10专业版/教育版/企业版处于通知模式怎么办?

很多使用win10系统的同学系统经常会收到"通知模式"的提示,那么为什么会出现这种提示呢,今天告诉你原因并且解决这个问题.首先出现这种情况的原因有2种:一.您的win10系统一直处于试用状态,试用状态只有30天,如果超过30天未激活就会收到通知模式的提示.二.在最近一次激活使用了官方不认可的激活方式,例如软件激活或者修改kms服务器.被云端发现后之前的激活 状态就会失效. 那么怎样才能永久激活您的windows10系统呢?包括win10专业版/Win10教育版/win10企业版和ltb

flink on yarn模式下两种提交job方式

flink on yarn模式下两种提交job方式 https://juejin.im/post/5bf8dd7a51882507e94b8b15 https://www.cnblogs.com/asker009/p/11327533.html https://ci.apache.org/projects/flink/flink-docs-release-1.9/ops/deployment/yarn_setup.html#flink-yarn-session 原文地址:https://www.

【iOS开发-26】利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值

实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个值传递给B类中得某个值(所以需要在B类中先准备一个变量来接受,就是用@property和@synthesize整个变量即可). (2)反向传值:比如需要把B类中的值传递给A类用.我们先在B类中写一个协议,协议里面有一个可以带参数的方法,这个参数就是我们要传递的值(这个协议也可以单独写,不一定写在B类中),然后B类遵循这个协议后,利用这个协议创建一个委托变

iOS开发之---传值大全

通知/代理/block都可以传值 (顺传倒传都可以) 一 顺传 用属性传值最简单明了 二 逆传 用block更简洁 三 通知传值使用场景    1- 很多控制器都需要知道一个事件,应该用通知(传递参数的过程就是传值):    2 - 相隔多层的两个控制器之间传值 ——————————————————————————————————————————————————————————— 8种传值方式(很全面,不知道谁整理的,先谢谢.拿过来大家共同学习) ?定义初始化方法在UI中,?般都是用在一个界面去