ComponentKit如何推送视图控制器CKComponentController

时间:2015-05-15 12:18:20

标签: ios objective-c viewcontroller componentkit

您刚才声明使用facebook提供的ComponentKit库 我一直在阅读他们的所有文档,但我找不到如何使用他们的CKComponentController类。

类似于如何推送视图控制器以及各种视图控制器的导航。

如果您有任何人知道如何使用CKComponentController,请告诉我 由于文档较少,我有点卡住了

谢谢。 姆兰。

2 个答案:

答案 0 :(得分:1)

我们通常的方法是将具有弱引用的对象传递给导航控制器作为传递给顶级组件的“上下文”对象。

确保它是一个弱引用,否则你最终会有一个保留周期!

至于在组件控制器中访问它,将上下文对象公开为组件上的属性,然后从self.component读取该属性。

答案 1 :(得分:0)

我已经解决了这个问题,但它绝对不是很明显。我不得不深入挖掘源代码。 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