使用委托关闭视图不起作用

Posted

技术标签:

【中文标题】使用委托关闭视图不起作用【英文标题】:Dismissing view using delegation not working 【发布时间】:2012-07-13 16:16:05 【问题描述】:

我正在尝试使用我不熟悉的委托来消除模态呈现的视图。我试图让它按照看到的苹果文档here 工作。到目前为止我的代码如下:

    将两个视图放在情节提要上,使用模态 segue 将第一个视图连接到第二个视图。 (到 view2 的 segue 工作正常)

    在第二个视图控制器中创建委托/创建返回时调用的方法:

    //inside of view2ViewController.h
    @class view2ViewController;
    @protocol view2ViewControllerDelegate <NSObject>
    -(void)goBack:(OptionsViewController *)controller;
    @end
    
    @interface OptionsViewController : UIViewController
    @property (nonatomic, weak) id <view2ViewControllerDelegate>delegate;
    - (IBAction)return:(id)sender;//connected to button
    @end
    

    在 view1ViewController 中实现委托 @interface view1ViewController : UIViewController &lt;view2ViewControllerDelegate&gt;

    在 view1Controller.m 中为委托方法 goBack 编写代码

    -(void)goBack:(view2ViewController *)controller
    [self dismissViewControllerAnimated:YES completion:nil];
    

    通过在 view2ViewController.m 中编写返回方法的代码来完成

    - (IBAction)return:(id)sender 
    [self.delegate goBack:self];
    

我不确定这段代码哪里出错了。返回方法被调用,但 goBack 没有被调用。我确实阅读了开发者文档,并认为我理解了,但我想不是......

PS 我将 *** 上的所有类/变量名称都更改为更通用的名称,因此如果变量名称拼写之间存在细微差异,可能是因为我输入了一个错误。

【问题讨论】:

你这样做是为了练习吗?因为否则 BY FAR 关闭模态视图控制器的最简单方法是将返回按钮链接到使用 [self dismissModalViewController animated:YES]; 的 ib 动作 是的,基本上我这样做是为了练习。我需要稍后使用它来将信息传递回我的另一个视图,但我开始很简单。我也需要它来处理一些非模态的转场 【参考方案1】:

我可以尝试的最佳镜头 -

确保将 SplashViewController 分配为 view2ViewController 的委托。

通过代码你可以这样做(在 SplashViewController m 文件中):

view2ViewController.delegate = self;

或者你可以在故事板上做。

顺便说一句 我不确定调用你的函数“return”是个好主意。

【讨论】:

这实际上是问题所在!我不知道我需要这样做,但这是有道理的(当然)。我的函数实际上并不称为 return,我对其进行了更改以使我的代码在 *** 上更通用。只是好奇,我将如何在 Storyboard 上而不是使用代码来做到这一点? 我通常以编程方式制作我的视图,所以我不确定。尝试右键单击 view2ViewController 的文件所有者。您可能会看到一个“代表”,将其拖到您的 SplashViewController 中?但我不确定。

以上是关于使用委托关闭视图不起作用的主要内容,如果未能解决你的问题,请参考以下文章

视图控制器和 UIView 之间的简单委托不起作用

UITextField shouldChangeCharactersInRange 委托不起作用

搜索栏子视图不起作用,搜索栏未调用 UITextField 委托方法

使用模态呈现的 NavigationController(iOS 5 - Storyboard)时,委托不起作用

BaseController 委托在选项卡栏控制器内的所有继承视图控制器中不起作用

带有uidatepicker委托的uipopover不起作用