使用委托关闭视图不起作用
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 <view2ViewControllerDelegate>
在 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 中?但我不确定。以上是关于使用委托关闭视图不起作用的主要内容,如果未能解决你的问题,请参考以下文章
UITextField shouldChangeCharactersInRange 委托不起作用
搜索栏子视图不起作用,搜索栏未调用 UITextField 委托方法
使用模态呈现的 NavigationController(iOS 5 - Storyboard)时,委托不起作用