我有两个视图的故事板,一个是主要的第二个是模态。因此,当我在第一个视图中点击按钮时,我调用我的模态视图(没有代码,全部在故事板中),我需要使用委托关闭我的模态视图。所以在我的第一个视图中我写了
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];
}
我在做错了什么?我在谷歌看到它可能是故事板中所有者的一些问题...我不知道:(
答案 0 :(得分:3)
你应该让代表弱,而不是'assign'。
答案 1 :(得分:3)
问题是
ModalView *modal = [[Modal alloc] init].
这将创建模态视图的新实例,而不是按下按钮时在屏幕上显示的实例。您应该实现prepareForSegue,并在那里设置您的委托。 ModalView将是segue.destinationViewController。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
ModalView *modal = segue.destinationViewController;
modal.delegate = self;
}
此代码位于您的第一个控制器中。