1

我正在使用基于视图的应用程序做一本书的应用程序。mainView 充当加载页面的背景视图。每个页面都是不同的视图,并且有自己的 nib。当我在页面上滑动时(实际上是在加载当前视图/页面的 mainView 上),该页面将被删除并添加下一个/上一个页面。

[currentPage.view removeFromSuperview];
[self.view insertSubview:nextPage.view atIndex:0];

我在这个 mainView 中添加了一个带有 barbutton 的 popoverController。它使用名为 popClass 的 tableviewController 类进行初始化。PopClass 是另一个 UITableViewController 类,它将作为 popViewController 的父级。

self.myPopController = [[PopController alloc] initWithStyle:UITableViewStylePlain];
self.myPopOverController = [[UIPopoverController alloc] initWithContentViewController:myPopController];

当我在弹出窗口中选择某行时,我希望 backgroundview(mainView) 加载与行号对应的页面。

为此,我在 bookView(mainView) Controller 类中编写了一个函数。并且当我选择某行时从popOver的父类调用它。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSInteger toPageNumber = indexPath.row + 1;
[viewController changeToPage:toPageNumber];
}

函数和代码行正在执行,但什么也没有发生。甚至打印日志行,但不执行任何操作。当我滑动视图/页面时,删除页面和添加另一个页面的代码是相同的。

问题是什么?或者有没有其他方法可以通过使用弹出框来改变 mainView 中的视图?

4

2 回答 2

4

您需要在弹出框控制器中引用背景视图控制器。

PopController控制器中,您应该有一个 delagate,例如:

@interface PopController: UITablViewController{

  //// other varibales;
      id delegate;
}

@property (nonatomic, retain) id delgate;

现在从你展示 popovercontroller 的类

你应该添加这一行:

[myPopController setDelegate:self];

然后您可以轻松访问主视图控制器类的任何方法。通过使用

[delegate callTheRequiredMethod];

希望这可以帮助。

谢谢,

马杜普

于 2010-05-02T13:03:59.040 回答
1

不看代码就很难判断出了什么问题。也就是说,这就是我要做的:

(1)当在 中选择一行时mainView,以模态形式呈现popoverController

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    PopoverViewController *vc = [[PopoverViewController alloc] init];
    [self.navigationController presentModalViewController:vc animated:YES];        
    [vc release];
}

(2)当 中的某些内容发生变化时popoverController,例如选择了一行,在中设置一个值parentViewController(应该是MainView):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    self.parentViewController.value = someValue;
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

(3)通过调用以下方式关闭popoverController您选择的任何位置:

[self dismissModalViewControllerAnimated:YES]`
于 2010-04-27T10:35:52.687 回答