0

私は 2 つのビューを持つストーリーボードを持っています。1 つはメイン、もう 1 つはモーダルです。したがって、最初のビューでボタンをタップすると、モーダル ビュー (コードなし、すべてストーリーボード) が呼び出され、デリゲートを使用してモーダル ビューを閉じる必要があります。だから私の最初の見解で私は書く

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];
}

私は何を間違っていますか?ストーリーボードの所有者に問題が発生する可能性があることをGoogleで確認しました...わかりません:(

4

2 に答える 2

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 に答える
3

「代入」ではなくデリゲートを弱くする必要があります。

于 2013-11-05T15:57:02.803 に答える