首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接chaining控制器委托

链接chaining控制器委托
EN

Stack Overflow用户
提问于 2013-10-21 19:00:22
回答 1查看 373关注 0票数 0

我有一个uivewcontroller (让我们称之为A),它加载uiviewcontroller (B),将它设置为一个委托,用于关闭B并继续A上的代码。还有一个场景,其中B导致另一个uiviewcontroller C(同样带有委托)。当C关闭时,我使用它的委托返回到B,但在这种情况下,我也希望B立即被排除,代码返回到A。现在,B->A工作,C->B工作,但是执行C->B->A在B处失败,错误是:“试图拒绝视图当前未出现的模式视图控制器”它似乎再次试图拒绝视图C。

这两个视图控制器都随此代码一起被取消(尽管代码位于不同的uiview控制器中)

代码语言:javascript
复制
[self dismissViewControllerAnimated:YES completion:nil];

我是否正确地使用委托来满足我的需要,还是应该使用不同的过程?

备选案文1 (A->B,B<-A)的编码:

A -> B

代码语言:javascript
复制
scorer_turn *st = (scorer_turn *) segue.destinationViewController;
st.st_delegate=self;
st.league = _match.league;
st.match = _match;
st.leg = _leg;
st.set = _set;

B -> A

代码语言:javascript
复制
-(void)closeView{
[_st_delegate scorer_turn:self didFinish:YES];
}

-(void)scorer_turn:(scorer_turn *)controller didFinish:(BOOL)finish{
    [self dismissViewControllerAnimated:YES completion:nil];
}

备选案文2 (A->B,B->C,C->B->A)的代码:

如上所示加:B -> C

代码语言:javascript
复制
matchSummaryViewController *ms = (matchSummaryViewController *) segue.destinationViewController;
ms.match = _match;
ms.oneScreen = NO;
ms.delegate = self;
[[segue destinationViewController] setManagedObjectContext:self.managedObjectContext];

C -> B,B -> A

在C:_delegate matchSummaryViewController中: self :YES;在B中,SelfunsViewController动画:YES:nil;_st_delegate scorer_turn:self didFinish:YES;在A中(这是错误发生的地方):

代码语言:javascript
复制
-(void)scorer_turn:(scorer_turn *)controller didFinish:(BOOL)finish{
    [self dismissViewControllerAnimated:YES completion:nil];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-21 19:10:19

如果ViewController B是modalViewController,而ViewController C被推到同一个modalViewController上,则调用

代码语言:javascript
复制
[self dismissViewControllerAnimated:YES completion:nil];

应该排除整个模态视图--就像在里面一样,它会同时忽略C和跳过B (B甚至不会出现),如果B也试图调用dismissViewControllerAnimated:completion:,这会导致问题,因为没有更多的模态视图可以排除。

现在,如果您有一些其他设置,比如B是一个模式,当按C时,它实际上会关闭自己并启动一个新的模态视图(如果您总是使用presentViewController:animated:completion函数,这将发生),那么您就有其他设计问题--您不应该像这样交换模态视图,而是使用

代码语言:javascript
复制
[self.navigationController pushViewController:C animated:YES]

来展示你的观点

代码语言:javascript
复制
[self.navigationController popViewControllerAnimated:YES]

驳回视图C并返回视图B。

当然,这是假设您正在使用navigationController来管理您的视图(通常您应该这样做)。

另一方面,如果您根本没有使用模态视图,那么dismissViewControllerAnimated:completion:完全不是您想要使用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19502547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档