使用委托将数据从 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]; 时没有任何反应。我知道它被调用,因为我得到了 checkcalled 日志。

主要的错误是您自己创建了一个 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

对你有帮助吗?