使用委托将数据从 Collection View Controller 传递到 View Controller
Pass data from Collection View Controller to View Controller using delegates
按下按钮时,我试图将数据从集合视图控制器发送到我的视图控制器。这是我目前所拥有的:
CollectionViewController.h
#import <UIKit/UIKit.h>
@class CollectionViewController;
@protocol CollectionViewDelegate <NSObject>
-(void) sendTest;
@end
@interface CollectionViewController : UICollectionViewController
@property (nonatomic, weak) id<CollectionViewDelegate> deligate;
@end
CollectionViewController.m
-(void) viewDidLoad {
[super viewDidLoad];
}
...
NSLog(@"check");
[self.deligate sendTest];
NSLog(@"called");
FooViewController.m
#import "CollectionViewController.h"
@interface FooViewController () <CollectionViewDelegate> {}
@end
@implementation FooViewController
- (void)viewDidLoad {
[super viewDidLoad];
CollectionViewController *controler = [[CollectionViewController alloc] init];
controler.deligate = self;
}
- (void) sendTest {
NSLog(@"Delegates are great!");
}
不幸的是,当我调用 [self.deligate sendTest];
时没有任何反应。我知道它被调用,因为我得到了 check
、called
日志。
主要的错误是您自己创建了一个 CollectionViewController
,但您不应该这样做。您想要的 CollectionViewController 由 Storyboard 自动实例化。如何找到这个视图控制器?
1 - 在 FooViewController 的 segue 中捕获它:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
CollectionViewController *collectionViewController =(CollectionViewController *) segue.destinationViewController;
collectionViewController.deligate = self;
}
2 - 在 FooViewController 的子视图控制器中找到它
self.childViewControllers
对你有帮助吗?
按下按钮时,我试图将数据从集合视图控制器发送到我的视图控制器。这是我目前所拥有的:
CollectionViewController.h
#import <UIKit/UIKit.h>
@class CollectionViewController;
@protocol CollectionViewDelegate <NSObject>
-(void) sendTest;
@end
@interface CollectionViewController : UICollectionViewController
@property (nonatomic, weak) id<CollectionViewDelegate> deligate;
@end
CollectionViewController.m
-(void) viewDidLoad {
[super viewDidLoad];
}
...
NSLog(@"check");
[self.deligate sendTest];
NSLog(@"called");
FooViewController.m
#import "CollectionViewController.h"
@interface FooViewController () <CollectionViewDelegate> {}
@end
@implementation FooViewController
- (void)viewDidLoad {
[super viewDidLoad];
CollectionViewController *controler = [[CollectionViewController alloc] init];
controler.deligate = self;
}
- (void) sendTest {
NSLog(@"Delegates are great!");
}
不幸的是,当我调用 [self.deligate sendTest];
时没有任何反应。我知道它被调用,因为我得到了 check
、called
日志。
主要的错误是您自己创建了一个 CollectionViewController
,但您不应该这样做。您想要的 CollectionViewController 由 Storyboard 自动实例化。如何找到这个视图控制器?
1 - 在 FooViewController 的 segue 中捕获它:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
CollectionViewController *collectionViewController =(CollectionViewController *) segue.destinationViewController;
collectionViewController.deligate = self;
}
2 - 在 FooViewController 的子视图控制器中找到它
self.childViewControllers
对你有帮助吗?