代码正在执行但是当从函数调用时视图没有加载?

时间:2010-04-27 10:21:26

标签: iphone uipopovercontroller

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

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

我在这个mainView中添加了一个带有按钮的popoverController。它初始化了一个名为popClass的tableviewController类。 PopClass是另一个UITableViewController类,它将充当popViewController的父级。

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

当我在popover中选择某一行时,我希望backgroundview(mainView)加载对应于行号的页面。

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

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

函数和代码行正在执行但没有任何事情发生。即使是日志行也会被打印,但不会发生任何动作。删除页面并添加另一个在浏览视图/页面时成功运行的页面时,代码相同。

有什么问题? OR还有其他方法可以使用popover在mainView中进行视图更改吗?

2 个答案:

答案 0 :(得分:4)

您需要在弹出控制器中引用后台视图控制器。

PopController控制器中,你应该有一个像:

这样的设备
@interface PopController: UITablViewController{

  //// other varibales;
      id delegate;
}

@property (nonatomic, retain) id delgate;

现在来自您展示popovercontroller的类

你应该添加这一行:

[myPopController setDelegate:self];

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

[delegate callTheRequiredMethod];

希望这有帮助。

谢谢,

Madhup

答案 1 :(得分: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]`