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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用委托将数据从Collection View Controller传递到View Controller相关的知识,希望对你有一定的参考价值。

在按下按钮时,我正在尝试将数据从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日志。

答案

主要的错误是你自己创造了一个CollectionViewController,但你不应该。您想要的CollectionViewController由Storyboard自动实例化。如何找到这个视图控制器?

1 - 在Foot ViewController中的segue期间捕获它:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    CollectionViewController *collectionViewController =(CollectionViewController *) segue.destinationViewController;
    collectionViewController.deligate = self;
}

2 - 在FooViewController中的子视图控制器中找到它

self.childViewControllers

它对你有帮助吗?

以上是关于使用委托将数据从Collection View Controller传递到View Controller的主要内容,如果未能解决你的问题,请参考以下文章

C#委托(Delegate)简介

将 UIImage 分配给 Collection View Cell

从 Collection View Xcode 中删除 Collection View Cell

C#C#委托使用详解(Delegates)

实现从 viewController 到 DataManager 类的委托

展开委托不会取消“中间”视图