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

 

presentViewController与dismissViewControllerAnimated是针对普通的界面框架(不用UINavigationController)。

 

从A界面打开B界面

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completioncompletion:(void (^)(void))completion 在B界面的viewDidAppear()调用后执行

 

关闭当前界面(B界面),返回之前的界面(A界面)

- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completioncompletion:(void (^)(void))completion 在A界面的viewDidAppear()调用后执行

 

假设

界面1为 ViewController01 : UIViewController 界面2为 ViewController02 : UIViewController

 

其中界面1为项目的rootViewController.

 

AppDelegate.h代码

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) NSString* localImagePath;

@end


 

AppDelegate.m的部分代码



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    
    
    ViewController01* mViewController01 = [[ViewController01 alloc]init];
    self.window.rootViewController = mViewController01;
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}




 

ViewController01.h代码



#import <UIKit/UIKit.h>

@interface ViewController01 : UIViewController

@property (strong,nonatomic) NSMutableDictionary* parameter;

@end




 

ViewController01.m代码



#import "ViewController01.h"
#import "MyViewTool.h"
#import "ViewController02.h"


@interface ViewController01 ()

@end

@implementation ViewController01

- (void)viewDidLoad {
    NSLog(@"viewDidLoad():视图1");
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self initViews];
    [self initParameter];
}

-(void)viewDidAppear:(BOOL)animated{
    NSLog(@"viewDidAppear():视图1");
    [super viewDidAppear:animated];
    //接收到的参数
    NSLog(@"viewDidAppear():视图1,收到的参数:from=%@",[self.parameter objectForKey:@"from"]);
}

- (void)initViews{
    
    CGSize size = [MyViewTool loadScreenSize];
    CGFloat width = size.width;
    
    UILabel* label = [MyViewTool createLabel:CGRectMake(10, 40, width-20, 100) withText:@"视图1" withBgcolor:[UIColor yellowColor]];
    
    UIButton* btn = [MyViewTool createButton:CGRectMake(label.frame.origin.x, label.frame.origin.y+label.frame.size.height+20, 200, 50) withDelegate:self withAction:@selector(buttonClick:) withTitle:@"按钮1:点击打开视图2"
                                 withBgColor:[UIColor lightGrayColor]];
    
    
    btn.center = CGPointMake(width/2, btn.center.y);
    
    [self.view addSubview:label];
    [self.view addSubview:btn];
}

#pragma mark 初始化要传递的参数
- (void)initParameter{
    self.parameter = [[NSMutableDictionary alloc]init];
}


-(void)buttonClick : (UIButton*) sender {
    NSLog(@"buttonClick:%@",sender.titleLabel.text);
    
    //设置传递参数的数据
    [self.parameter setObject:@"我是视图1设置的参数" forKey:@"from"];
    
    //打开 ViewController02
    ViewController02* mViewController02 = [[ViewController02 alloc]init];
    mViewController02.parameter=self.parameter;
    
    [self presentViewController:mViewController02 animated:YES completion:^{
        NSLog(@"presentViewController成功");
    }];
    
}

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

@end



 

ViewController02.h代码



#import <UIKit/UIKit.h>

@interface ViewController02 : UIViewController

@property (strong,nonatomic) NSMutableDictionary* parameter;

@end



 

ViewController02.m代码



#import "ViewController02.h"
#import "MyViewTool.h"

@interface ViewController02 ()

@end

@implementation ViewController02


- (void)viewDidLoad {
    NSLog(@"viewDidLoad():视图2");
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self initViews];
}

-(void)viewDidAppear:(BOOL)animated{
    NSLog(@"viewDidAppear():视图2");
    [super viewDidAppear:animated];
    //接收到的参数
    NSLog(@"viewDidAppear():视图2,收到的参数:from=%@",[self.parameter objectForKey:@"from"]);
}

- (void)initViews{
    
    CGSize size = [MyViewTool loadScreenSize];
    CGFloat width = size.width;
    
    UILabel* label = [MyViewTool createLabel:CGRectMake(10, 40, width-20, 100) withText:@"视图2" withBgcolor:[UIColor yellowColor]];
    
    UIButton* btn = [MyViewTool createButton:CGRectMake(label.frame.origin.x, label.frame.origin.y+label.frame.size.height+20, 200, 50) withDelegate:self withAction:@selector(buttonClick:) withTitle:@"按钮2:点击返回视图1" withBgColor:[UIColor lightGrayColor]];
    
    
    btn.center = CGPointMake(width/2, btn.center.y);
    
    [self.view addSubview:label];
    [self.view addSubview:btn];
}

-(void)buttonClick : (UIButton*) sender {
    NSLog(@"buttonClick:%@",sender.titleLabel.text);
    //设置返回给视图1的参数
    [self.parameter setObject:@"我是视图2设置的参数" forKey:@"from"];
    [self dismissViewControllerAnimated:YES completion:^{
        NSLog(@"dismissViewControllerAnimated成功");
    }];
}


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

@end



 

 项目源代码参见附近中的demo010.zip