Storyboard Modal ViewController 不会关闭;已经尝试了一切
Posted
技术标签:
【中文标题】Storyboard Modal ViewController 不会关闭;已经尝试了一切【英文标题】:Storyboard Modal ViewController won't dismiss; have tried everything 【发布时间】:2012-02-26 19:42:48 【问题描述】:我(认为)我已经在 Apple 的文档和在线(这里和其他地方)中广泛研究了这个问题。但是,经过几个小时的故障排除后,我没有主意了。我的模态视图控制器拒绝在适当的时间自行关闭。
我知道模态控制器必须由呈现模态视图的控制器解除,据我所知,这就是我正在做的事情。
问题:
这是显示视图控制器的 prepareForSegue 中包含的完整代码:
if ([segue.identifier isEqualToString:@"DISCREPANCYVC"])
DiscrepancyViewController *destController = segue.destinationViewController;
destController.discrepancyDelegate = self;
模态控制器包含两个运行正常的 UIPickerView。选择器视图用于构造“classificationString”,一个 NSString。
我在模态视图上有一个“完成”按钮,按下该按钮时会调用此方法/选择器(根据我设置的协议定义):
[self.DiscrepancyDelegate didFinishWithClassification:classificationString];
didFinishWithClassification 方法出现如下:
- (void)didFinishWithClassification:(NSString *)classification
[self dismissModalViewControllerAnimated:NO];
如果重要,协议定义为
@protocol DiscrepancyViewControllerDelegate <NSObject>
@required
- (void)didFinishWithClassification:(NSString *)aClassification;
@end
保持对当前视图的引用的属性显示为:
@property (strong, nonatomic) id <DiscrepancyViewControllerDelegate> DiscrepancyDelegate;
还有四个附加属性(强、非原子),用于容纳填充 UIPickerViews 的四个数组(每个选择器有两个组件)。
我尝试了动画和非动画解雇,但行为没有改变。
这可能是什么原因造成的?我正在使用 ARC,所以在尝试转储模式屏幕之前,我不能释放任何东西,对吗?根据我的阅读,在这种情况下 viewDidUnload() 不一定会触发(在我的情况下也不会触发)。
救命!!
谢谢,
泰德
【问题讨论】:
【参考方案1】:使委托协议工作需要 9 个步骤。在我的回答 here 中检查它们。
此外,声明:“我知道模态控制器必须由呈现模态视图的控制器解除”是不正确的。建议将其作为良好的形式,但您可以将dismiss语句放在模态视图控制器中,如果您没有其他理由拥有委托,那么我会这样做,而不是忍受设置委托协议的复杂性。
【讨论】:
我已经针对 Wenderlich 网站验证了我的所有步骤,并且它们都符合要求。我已将弃用的dismissModal 调用更改为dismissViewController,但行为没有改变——屏幕仍然没有消失。还有什么可能导致屏幕持续存在?有人吗?【参考方案2】:我想通了;有点。我一定是错误地连接了一个插座,或者是某种重复连接,因为在破坏了按钮和控制器、选择器和控制器之间的所有连接之后,然后重新设置它们,它就开始工作了。我不知道我到底做了什么(这让我快疯了),但这不是编码问题。
忠告:用细齿梳检查连接。他们可以掩盖问题而不把自己表现为错误。
咕噜咕噜。
【讨论】:
以上是关于Storyboard Modal ViewController 不会关闭;已经尝试了一切的主要内容,如果未能解决你的问题,请参考以下文章
iOS_16_控制器切换_modal_storyboard拖线的方式
Storyboard Modal ViewController 不会关闭;已经尝试了一切
iOS Storyboard Presenting Segues "relationship, embed, push, modal, custom" 类型