これは複雑なので、できるだけ多くの情報を提供するために最善を尽くします。メインの 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];
したがって、メインページから開きたいと思います。