0

我试图在我的 KNSemiModal 子视图中使用这两个库和一个自定义按钮来关闭它。当我打电话

UIViewController * parent = [self.view containingViewController];
if ([parent respondsToSelector:@selector(dismissSemiModalView)]) {
    [parent dismissSemiModalView];
}

我 git (意外的双关语,哇)这个错误:

Defaults must have been set when accessing options

这是怎么回事?

4

1 回答 1

0

问题是 parent 不是最初显示视图的实际视图。它从 IIViewDeck 中获取了一些东西。

因此,取而代之的是,让获取对原始父视图的引用变得容易。有很多方法可以解决这个问题(在子视图中委托、单例等)。我采用了一种肮脏的方法,即明确地将父级设置在子级上。将此属性添加到您的子视图:

@property UIViewController *customParent;

然后在将视图变为现实之前进行设置:

- (IBAction)onButtonTouch:(UIButton *)button {
    NSLog(@"Touch");
    semiVC.customParent = self;

    [self presentSemiViewController:semiVC withOptions:@{
                                                         KNSemiModalOptionKeys.pushParentBack    : @(NO),
                                                         KNSemiModalOptionKeys.animationDuration : @(.6),
                                                         KNSemiModalOptionKeys.shadowOpacity     : @(0.3),
                                                         }];

}

最后当你想在子视图中关闭时使用它:

- (IBAction)onCloseTap:(id)sender {
    [self.customParent dismissSemiModalView];
}
于 2013-10-10T23:36:21.400 回答