Controller到Appdelegate传值
/**
去别的页面执行方法的方法:
1. 创建代理,将要在别的页面执行的方法做成代理方法
2. 在本controller中创建代理属性,并且在需要激活代理方法的方法里写入
- (void)haha {
if (_delegate) {
[_delegate haha];
}
}
从别的页面调用代理方法
3. 在别的页面执行代理方法
*/
#warning 1.创建代理,可以通过代理去别的地方执行方法
@protocol ViewControllerDelegate <NSObject>
@required
- (void)haha; //到AppDelegate中执行该方法
@end
#pragma mark 创建代理属性
@property (nonatomic,assign) id<ViewControllerDelegate,NSObject> delegate;
[self haha]; //调用本页面方法
#pragma mark 通过代理去执行AppDelegate中的方法
- (void)haha {
if (_delegate) {
[_delegate haha];
}
}
#import "ViewController.h"
#warning 在此页面引用ViewController.h,执行ViewControllerDelegate代理方法,
@interface AppDelegate : UIResponder <UIApplicationDelegate,ViewControllerDelegate> {
ViewController *VC;
}
#pragma mark 调用VC,添加VC,执行代理方法,实现跨页面执行方法
VC = [[ViewController alloc] init];
self.window.rootViewController = VC;
VC.delegate = self;
#pragma mark 执行代理方法
- (void)haha {
NSLog(@"haha");
}
View使用代理调用controller中方法
#pragma mark 创建代理方法
@protocol ViewDelegate <NSObject>
- (void)viewDelegate;
@end
@property (nonatomic,assign) id<ViewDelegate,NSObject> viewDelegateOne; //创建代理
- (instancetype)initWithFrame:(CGRect)frame andDelegate:(id) delegate; //重写创建方法
#pragma mark 在方法中直接对代理进行赋值,如果不在此赋值,则会先执行方法在对代理赋值,出错
- (instancetype)initWithFrame:(CGRect)frame andDelegate:(id) delegate {
_viewDelegateOne = delegate;
return [self initWithFrame:frame];
}
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
view.backgroundColor = [UIColor redColor];
[self addSubview:view];
[self viewDelegate]; //这个页面调用方法
}
return self;
}
#pragma mark 调用controller中方法
- (void)viewDelegate {
if (_viewDelegateOne) {
[_viewDelegateOne viewDelegate];
}
}
#import "View.h" //引入
@interface ViewController : UIViewController<ViewDelegate> {
View *testView;
}
testView = [[View alloc] initWithFrame:CGRectMake(100, 100, 200, 200) andDelegate:self];
[self.view addSubview:testView];
#pragma mark 执行View中的方法
- (void)viewDelegate {
NSLog(@"view测试成功");
}