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

因此我想从主页打开它。

4

1 回答 1

0

在我看来,您有 2 个 ModalPopup 实例。由于您说您将按钮连接到 IB 中的 ModalPopup,这让我相信您正在 xib 中创建 ModalPopup 的实例,这与您以编程方式创建的 ModalPopup 不同。按下按钮时调用的 ModalPopup 是“完全空的”这一事实进一步证明了这一点。

如果是这种情况,您应该从 xib 获取实例,而不是以编程方式创建 ModalPopup,就像获取视图一样。我还怀疑您已经将视图添加到 xib 中的 ModalPopup,这意味着您也不必手动添加它们。

于 2013-10-30T21:27:51.310 回答