使用SharedApplication进行传值

一般而言,在iOS中页面间传值,常见的方法有四种,

1
使用SharedApplication,定义一个变量来传递.

   2
使用文件plist,或者NSUserdefault来传递

   3
通过一个单例的class来传递

   4
通过Delegate来传递。

我先学习一下第一种方法,下面为范例:

(1)AppDelegate.h

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) NSString *dname;//定义dname传递帐号的值
@property (strong, nonatomic) NSString *dpass;//定义dpass传递密码的值

@end

AppDelegate.m

#import "AppDelegate.h"
#import "ViewController.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    //create the window
    self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];
    self.window.rootViewController = [[ViewController alloc]init];
    [self.window makeKeyAndVisible];
    return YES;
}

@end

(2)ViewController.h

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

@interface ViewController : UIViewController

@end

ViewController.m

#import "ViewController.h"
#import "NavViewController.h"

UITextField* nameTextField;
UITextField *passTextField;
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    UILabel* nameLabel = [[UILabel alloc]initWithFrame:CGRectMake(30, 50, 50, 30)];
    nameLabel.text = @"账号";
    [self.view addSubview:nameLabel];

    UILabel* passLabel = [[UILabel alloc]initWithFrame:CGRectMake(30, 100, 50, 30)];
    passLabel.text = @"密码";
    [self.view addSubview:passLabel];

    nameTextField = [[UITextField alloc]initWithFrame:CGRectMake(100, 50, 150, 30)];
    nameTextField.borderStyle = UITextBorderStyleRoundedRect;
    [self.view addSubview:nameTextField];

    passTextField =  [[UITextField alloc]initWithFrame:CGRectMake(100, 100, 150, 30)];
    passTextField.borderStyle = UITextBorderStyleRoundedRect;
    [self.view addSubview:passTextField];

    UIButton* loginBtn = [UIButton buttonWithType:UIButtonTypeSystem];
    loginBtn.frame = CGRectMake(60, 180, 72, 30);
    [loginBtn setTitle:@"登陆" forState:UIControlStateNormal];
    [self.view addSubview:loginBtn];
    [loginBtn addTarget:self action:@selector(onLogin:) forControlEvents:UIControlEventTouchUpInside];

}

- (void) onLogin: (id) sender
{
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
    appDelegate.dname = nameTextField.text; ;
    appDelegate.dpass = passTextField.text;
        NavViewController* navCtr = [[NavViewController alloc] init];
        [self presentViewController:navCtr animated:YES completion:nil];
}

@end

(3) NavViewController.h

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

@interface NavViewController : UIViewController

@end

NavViewController.m

#import "NavViewController.h"
UILabel* welcomeLabel;
@interface NavViewController ()

@end

@implementation NavViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    AppDelegate *appdelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    UILabel* helloLabel = [[UILabel alloc]initWithFrame: CGRectMake(30, 50, 150, 30)];
    helloLabel.text = @"欢迎您,";
    [self.view addSubview:helloLabel];

    UILabel* passLabel = [[UILabel alloc]initWithFrame: CGRectMake(30, 100, 150, 30)];
    passLabel.text = @"您的密码是,";
    [self.view addSubview:passLabel];

    UILabel* welcomeLabel = [[UILabel alloc]initWithFrame:CGRectMake(85, 50, 120, 30)];
    welcomeLabel.text = appdelegate.dname;
    [self.view addSubview: welcomeLabel];

    UILabel* pwdLabel = [[UILabel alloc]initWithFrame:CGRectMake(120, 100, 120, 30)];
    pwdLabel.text = appdelegate.dpass;
    [self.view addSubview: pwdLabel];

}

@end

效果图如下:

时间: 2024-10-31 05:30:18

使用SharedApplication进行传值的相关文章

ios俩个APP之间跳转、传值

两个APP之间的跳转是通过[[UIApplication sharedApplication] openURL:url]这种方式来实现的. 1.首先设置第一个APP的url地址 2.接着设置第二个APP的url地址 3.需要跳转的时候 NSString *urlString = [NSString stringWithFormat:@"AppJumpSecond://%@",textField.text]; [[UIApplication sharedApplication] open

iOS开发之---传值大全

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

iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)

iOS页面间传值的方式(NSUserDefault/Delegate/NSNotification/Block/单例) 实现了以下iOS页面间传值:1.委托delegate方式:2.通知notification方式:3.block方式:4.UserDefault或者文件方式:5.单例模式方式:6.通过设置属性,实现页面间传值 在iOS开发中,我们经常会遇到页面间跳转传值的问题,现归纳总结一下: 情况1:A页面跳转到B页面 方法: 在B页面的控制器中,编写对应的属性,在A页面跳转到B页面的地方,给

界面传值整的好头疼啊

页面间传值(RootViewController和subViewController) 方式1:  正向传值和反向传值,在AppDelegate.h文件内定义成员变量[UIApplication sharedApplication].delegate将返回该成员变量的地址,可以进行存值和取值 方式2:  正向传值,直接在第二层视图声明并初始化第一层视图的变量,使用该变量来获取第一层视图的成员变量的值; 反向传值,就是在第二层视图调用第一曾视图的方法,该方法内有第一层视图的成员变量,通过对成员变量

iOS页面间传值的方式

实现了以下iOS页面间传值:1.委托delegate方式:2.通知notification方式:3.block方式:4.UserDefault或者文件方式:5.单例模式方式:6.通过设置属性,实现页面间传值 在iOS开发中,我们经常会遇到页面间跳转传值的问题,现归纳总结一下: 情况1:A页面跳转到B页面 方法: 在B页面的控制器中,编写对应的属性,在A页面跳转到B页面的地方,给B的属性赋值即可 //SecondViewController.h @property(nonatomic) NSInt

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

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

回传值(代理、通知、block)

回传值问题,一直都是困扰初学者的问题,今写者 代理.通知.block 三者的回传值做了一个小小的总结, Main.storyboard 视图: 通过代码分别创建三个代表 代理.通知.block 的按钮,点击相应的按钮,会将相应的文本传入文本框中显示出来 代码如下: 1 // GWFMyDelegateBlockNotyView.h 2 // 回传值 3 4 #import <UIKit/UIKit.h> 5 @class GWFMyDelegateBlockNotyView; 6 7 //协议

ios两个app之间跳转,传值的实现

两个APP之间的跳转是通过[[UIApplication sharedApplication] openURL:url]这种方式来实现的. 1.首先设置第一个APP的url地址 2.接着设置第二个APP的url地址 3.需要跳转的时候 NSString *urlString = [NSString stringWithFormat:@"AppJumpSecond://%@",textField.text]; [[UIApplication sharedApplication] open

iOS-跨界面传值和跨应用传值

跨界面传值 从一个界面将一个结果值传到另一个界面,这个是我们在开发过程中非常常见的一个问题.传值本身并不是一个太复杂的问题,在此主要简述一下常用的传值方法. 我们传值常用的方法主要有四种: 1.属性传值 2.代理传值 3.block传值 4.通知传值 属性传值: 属性传值应该来说是比较简单的一种传值方式,但是这种传值方式有其局限性,常用的一种场合是我们从界面A跳转到界面B,如何我们想讲界面A的值传到界面B,属性传值是比较方便的一种方式.如下图所示,如果我们点击A界面上的一个按钮,跳转到B界面,并