使用委托将数据从 Collection View Controller 传递到 View Controller
Posted
技术标签:
【中文标题】使用委托将数据从 Collection View Controller 传递到 View Controller【英文标题】:Pass data from Collection View Controller to View Controller using delegates 【发布时间】:2017-12-17 21:40:56 【问题描述】:按下按钮时,我试图将数据从集合视图控制器发送到我的视图控制器。这是我目前所拥有的:
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
日志。
【问题讨论】:
self.deligate
在您调用sendTest
时可能为零,因为 FooViewController 已被释放。拥有那些 NSLogs 并不会告诉你什么。使用一些断点。
好的,感谢有关日志的建议。你能解释一下self.deligate
吗?也许如何不让FooViewController
被释放?谢谢!
委托属性“deligate”有一个弱引用,这很好,但这意味着委托需要被其他对象保留。我可以认为也许你在某个时候解雇了 FooViewController,然后它就永远消失了。您可以发布更多代码吗?你什么时候展示 CollectionViewController?
项目的其余部分包含许多其他代码,可能会使其更复杂。集合视图控制器位于容器视图中。项目链接:github.com/pudility/quick-things/tree/master/quickthings/src/… 再次感谢您的帮助。
【参考方案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
对你有帮助吗?
【讨论】:
以上是关于使用委托将数据从 Collection View Controller 传递到 View Controller的主要内容,如果未能解决你的问题,请参考以下文章
将 UIImage 分配给 Collection View Cell
从 Collection View Xcode 中删除 Collection View Cell