嗨,刚刚说要使用ComponentKit
facebook 提供的库,我一直在浏览他们的所有文档,但我找不到如何使用他们的CKComponentController
类。
比如如何推送一个视图控制器以及各种视图控制器的导航。
如果你们中的任何人知道如何使用CKComponentController
请让我知道由于文档较少我有点卡住了
谢谢你。伊姆兰。
嗨,刚刚说要使用ComponentKit
facebook 提供的库,我一直在浏览他们的所有文档,但我找不到如何使用他们的CKComponentController
类。
比如如何推送一个视图控制器以及各种视图控制器的导航。
如果你们中的任何人知道如何使用CKComponentController
请让我知道由于文档较少我有点卡住了
谢谢你。伊姆兰。
我们通常的做法是将带有弱引用的对象作为“上下文”对象传递给导航控制器,并传递给顶级组件。
确保它是一个弱引用,否则你会得到一个保留周期!
至于在组件控制器中访问它,请将上下文对象公开为组件上的属性,然后从self.component
.
我解决了这个问题,但这绝对不是立即显而易见的。我不得不挖掘源代码。StoryViewController 扩展了 UIViewController。
@interface StoryViewController () <
CKComponentProvider,
CKComponentHostingViewDelegate
>
@end
@implementation StoryViewController {
CKComponentDataSource *_componentDataSource;
CKComponentFlexibleSizeRangeProvider *_sizeRangeProvider;
}
- (void)viewDidLoad {
_sizeRangeProvider = [CKComponentFlexibleSizeRangeProvider providerWithFlexibility:CKComponentSizeRangeFlexibleHeight];
CKComponentHostingView *hostingView = [[CKComponentHostingView alloc] initWithComponentProvider:[self class]
sizeRangeProvider:_sizeRangeProvider
context:nil];
hostingView.delegate = self;
hostingView.model = self.story;
CGSize size = [hostingView sizeThatFits:CGSizeMake(self.view.frame.size.width, FLT_MAX)];
hostingView.frame = CGRectMake(0, 0, size.width, size.height);
[self.view addSubview:hostingView];
}
#pragma mark - CKComponentProvider
+ (CKComponent *)componentForModel:(id<NSObject>)story context:(id<NSObject>)context {
return [StoryComponent newWithStory:story context:nil];
}
#pragma mark - CKComponentHostingViewDelegate <NSObject>
- (void)componentHostingViewDidInvalidateSize:(CKComponentHostingView *)hostingView {
NSLog(@"componentHostingViewDidInvalidateSize");
}
@end