0

これは複雑なので、できるだけ多くの情報を提供するために最善を尽くします。メインの UIViewController は、情報画面の形式でモーダル ポップアップを開きます。

ここに MainViewController からの呼び出しがあります

infoPopup = [ModalPopup modalPopupWithDelegate:self];

[infoPopup presentInView:self.view.window];

[self.view addSubview:infoPopup];

これが ModalPopup の受信方法です

+ (id)modalPopupWithDelegate:(id <ModalPopupDelegate>)dlg {

ModalPopup *info = [[ModalPopup alloc] init];
info.delegate = dlg;

return info;
}

ModalPopup では、「modalPopupFinished」のオプション メソッドを使用してプロトコルを作成し、MainViewController をデリゲートにします。

ModalPopup で UIScrollView を追加し、スクロールビューに 5 つの UIView を挿入しました。

すべてのビューを同じ XIB ファイルに作成しました

NSString *infoXib;

if (IS_IPAD)
    infoXib = @"info_iPad";
else
    infoXib = @"info_iPhone";

NSArray *views;

views = [[NSBundle mainBundle] loadNibNamed:infoXib owner:self options:nil];
UIView *v1 = [views objectAtIndex:0];

views = [[NSBundle mainBundle] loadNibNamed:infoXib owner:self options:nil];
UIView *v2 = [views objectAtIndex:1];

views = [[NSBundle mainBundle] loadNibNamed:infoXib owner:self options:nil];
UIView *v3 = [views objectAtIndex:2];

views = [[NSBundle mainBundle] loadNibNamed:infoXib owner:self options:nil];
UIView *v4 = [views objectAtIndex:3];

views = [[NSBundle mainBundle] loadNibNamed:infoXib owner:self options:nil];
UIView *v5 = [views objectAtIndex:4];

NSArray *pages = [NSArray arrayWithObjects:v1, v2, v3, v4, v5, nil];
[self setPagesInArray:pages];


- (void)setPagesInArray:(NSArray *)pages {

    if (pages) {

        int numberOfPages = pages.count;

        [pageScroll setContentSize:CGSizeMake(pageScroll.frame.size.width * numberOfPages, pageHeight)];
        pageControl.numberOfPages = numberOfPages;

        NSUInteger i = 0;

        while (i < numberOfPages) {

            UIView *page = [pages objectAtIndex:i];
            page.frame = CGRectMake(pageWidth * i, 0, pageWidth, pageHeight);
            [pageScroll addSubview:page];

            i++;
        }
    }
}

ビューはスクロールビューで正常に読み込まれ、期待どおりにすべてスクロールできます。

いくつかのボタンとしての XIB のビューの 1 つです。ビューをカスタム クラス ModalPopup のメンバーにしました。ボタンを ModalPopup のいくつかの IBActions に配線したところ、期待どおりに起動しました。

ModalPopup では、MainViewController でデリゲートの "modalPopupFinished" イベントを発生させる閉じるボタンを作成します。

- (void)finishCloseAnimation {

    if ([_delegate respondsToSelector:@selector(modalPopupFinished)])
        [_delegate modalPopupFinished];

    [self removeFromSuperview];
}

問題ありません

ビューからボタンの1つを押してデリゲートメソッドを起動すると、脳が失われ、デリゲートを思い出せません

- (IBAction)facebook:(id)sender {

    if ([_delegate respondsToSelector:@selector(sendLikeFacebook)])
        [_delegate sendLikeFacebook];
}

実際、ModalPopup で Facebook メソッドに入ると、すべてが nil になります。

MainViewController で起動しようとしているメソッドが開きます

[self presentViewController:composeController animated:YES completion:nil];

したがって、メインページから開きたいと思います。

4

1 に答える 1