0

我有两个视图的故事板,一个是主要的,第二个是模态的。因此,当我在第一个视图中点击按钮时,我调用我的模态视图(无代码,全部在情节提要),我需要使用委托关闭我的模态视图。所以在我的第一个观点中,我写

First.h

#import "Modal.h"

@interface SkyViewController: UIViewController <ModalDelegate>

First.m

in viewDidLoad
ModalView *modal = [[Modal alloc] init];
modal.delegate = self;

-(void)exit
{
   [self dismissModalViewControllerAnimated:YES];
}

模态视图

Modal.h

@protocol ModalDelegate;

@interface ModalView : UIViewController

....

@property (assign) id<ModalDelegate> delegate;

.....

@protocol ModalDelegate

-(void)exit;

@end

主要是

Modal.m

....
@syntesize delegate;

...

-(void)buttonPressed
{
   [delegate exit];
}

我究竟做错了什么?我在谷歌看到它可能是故事板所有者的一些问题......我不知道:(

4

2 回答 2

3

您应该使委托变弱而不是“分配”。

于 2013-11-05T15:57:02.803 回答
3

问题是

  ModalView *modal = [[Modal alloc] init]. 

这会创建一个模态视图的新实例,而不是单击按钮在屏幕上显示的那个。您应该实现 prepareForSegue,并在那里设置您的委托。ModalView 将是 segue.destinationViewController。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    ModalView *modal = segue.destinationViewController;
    modal.delegate = self;
}

此代码进入您的第一个控制器。

于 2013-11-05T16:01:45.760 回答