使用委托将数据从Collection View Controller传递到View Controller

时间:2017-12-17 21:40:56

标签: ios objective-c uicollectionview delegates viewcontroller

按下按钮,我正在尝试将数据从Collection View Controller发送到我的View Controller。以下是我到目前为止的情况:

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日志。

1 个答案:

答案 0 :(得分:1)

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

对你有帮助吗?