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