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" 类型

IOS的模态窗口(modal)

使用 Storyboard 在视图之间转换

故事板连续和返回