实现功能:创建一个带导航功能的两个视图控制器(从一个窗口跳转到另一个窗口),第二个窗口创建两个按钮,标题分别为红色和绿色,点相应的按钮弹回前一个窗口,同时前一个窗口的背影色变成按钮标题指示的颜色(通过添加按键代理实现)。
一、添加一个窗口,添加两个按键(如图);
二、添加按键代理,代码实现
//
// SecondViewController.h
// 界面跳转
//
// Created by Jarvan on 15/5/23.
// Copyright (c) 2015年 Jarvan. All rights reserved.
//
#import <UIKit/UIKit.h>
@class SecondViewController;
// 1、添加按键代理
@protocol SecondViewControllerDelegate <NSObject>
// 2、代理的协议方法
- (void)secondViewControllerButtonClick:(SecondViewController *)secondView;
@end
@interface SecondViewController : UIViewController
// 3、定义代理属性
@property (nonatomic, weak) id<SecondViewControllerDelegate> delegate;
// 颜色的属性
@property (nonatomic, copy) NSString *colorString;
@end
//
// SecondViewController.m
// 界面跳转
//
// Created by Jarvan on 15/5/23.
// Copyright (c) 2015年 Jarvan. All rights reserved.
//
#import "SecondViewController.h"
@interface SecondViewController ()
@end
@implementation SecondViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
// 按键事件处理
- (IBAction)buttonClick:(UIButton *)sender {
if (sender.tag == 0) {
NSLog(@"---红色按钮---");
_colorString = @"red";
// 通知代理
// 1> 判断代理是否实现了协议方法
if ([self.delegate respondsToSelector:@selector(secondViewControllerButtonClick:)]) {
// 2> 如果实现了,再通知代理去工作
[self.delegate secondViewControllerButtonClick:self];
}
// 返回第一个界面
[self dismissModalViewControllerAnimated:YES];
} else {
NSLog(@"---绿色按钮---");
_colorString = @"blue";
// 通知代理
// 1> 判断代理是否实现了协议方法
if ([self.delegate respondsToSelector:@selector(secondViewControllerButtonClick:)]) {
// 2> 如果实现了,再通知代理去工作
[self.delegate secondViewControllerButtonClick:self];
}
[self dismissModalViewControllerAnimated:YES];
}
}
@end
//
// ViewController.m
// 界面跳转
//
// Created by Jarvan on 15/5/23.
// Copyright (c) 2015年 Jarvan. All rights reserved.
//
#import "ViewController.h"
#import "SecondViewController.h"
// 遵守协议,遵守协议只是为了可以快速的敲出代理方法!
@interface ViewController () <SecondViewControllerDelegate>
@property (nonatomic, strong) SecondViewController *secondView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
#pragma mark - 设置代理注意点
// 4、设置成为代理,在加载视图这就是实例化一个对象_secondView,之后就可以设置_secondView这个对象的delegate的属性
// 载入SecondViewController,即跳转到第二个窗口
_secondView = [self.storyboard instantiateViewControllerWithIdentifier:@"second"];
_secondView.delegate = self;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)buttonClick:(UIButton *)sender {
if (sender.tag == 0) {
// 将结果显示到界面上
[self presentModalViewController:_secondView animated:YES];
}
}
// 5、代理方法的实现
- (void)secondViewControllerButtonClick:(SecondViewController *)secondView{
if (secondView.colorString == @"red") {
self.view.backgroundColor = [UIColor redColor];
} else {
self.view.backgroundColor = [UIColor blueColor];
}
}
@end