这很复杂,所以我会尽力提供尽可能多的信息。我的主 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 个 UIViews 插入到滚动视图中。
我在同一个 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 中的视图之一是一些按钮,我已将该视图作为自定义类 ModalPopup 的成员。我已将按钮连接到 ModalPopup 中的一些 IBAction,它们按预期触发。
在 ModalPopup 中,我创建了一个关闭按钮,用于触发 MainViewController 上的委托“modalPopupFinished”事件。
- (void)finishCloseAnimation {
if ([_delegate respondsToSelector:@selector(modalPopupFinished)])
[_delegate modalPopupFinished];
[self removeFromSuperview];
}
没问题,一切都很好......除了
当我按下视图中的一个按钮并启动委托方法时,它已经失去了大脑并且不记得委托
- (IBAction)facebook:(id)sender {
if ([_delegate respondsToSelector:@selector(sendLikeFacebook)])
[_delegate sendLikeFacebook];
}
事实上,当我进入 ModalPopup 上的 Facebook 方法时,一切都是零。
我试图在 MainViewController 中触发的方法打开
[self presentViewController:composeController animated:YES completion:nil];
因此我想从主页打开它。