2010-03-10 70 views
3

我有一对夫妇的UITableViewController类的,我只注意到这些方法都不会被调用:viewWillAppear没有在UITableViewController中调用?

-(void)viewWillAppear:(BOOL)animated; 
-(void)viewDidAppear:(BOOL)animated; 

http://discussions.apple.com/thread.jspa?threadID=1529769&tstart=0阅读,我将不得不推视图控制器时要调用这些方法我自己,但很奇怪,因为它适用于除了UITableViewController之外的任何东西。

也使得它有点问题的时候,我需要有在推的UITableViewController的UIViewController中取消选择一个UITableViewCell。

+0

有什么问题吗? – pheelicks 2010-03-10 15:27:33

+0

对不起。 为什么UITableViewController默认不调用这些方法? – runmad 2010-03-10 16:20:00

回答

4

没有人解决,是因为原来的职位是正确的 - 简单地使用的UITableViewController,推动该控制器到navController的表视图尽管它应该不会触发这些方法。我有一系列UITableViewControllers和表视图被推送和弹出来显示分层数据 - 没有什么奇怪的,但“viewWill/Did/Appear/Disappear”方法从不会被调用。只调用viewDidLoad和viewDidUnload。

在我们的设置中都必须存在接线问题,但只需将视图推入navigationController应该是所有必需的(?) - 很难相信这可能已被忽视作为一个长期的基本错误。

0

默认情况下调用这两个方法来通知更改。 UITableViewController是UIViewController的子类,所以会有相同的行为。您可以在View Controller Programming Guide中看到更多

viewWillAppear:和viewDidAppear:方法为子类提供了执行与视图外观相关的任何其他操作的机会。

你怎么知道这些方法是不是叫什么名字?你可以提供更多的代码,或者至少你用NSLog()来测试它们是否有一些消息被打印出来。

+0

我设置了断点和NSLogs,没有任何反应。 – runmad 2010-03-10 16:46:37

+0

你能否提供一些这两种方法的实施代码,以便我可以看到会发生什么... – 2010-03-10 16:50:25

+0

很难在评论栏中。基本上我有一个UINavigationController,并在navigationBar中,我有一个UISegmentedControl。切换段,用户在两个视图(配置文件和订单)之间切换。点击一个订单应该把视图推到另一个视图(在同一个UINavigationController里面),它具有订单详细信息。基本上,它与App Store应用的“精选”部分相同。你有3段,每段都有自己的UITableView,可以推入一个新的视图。我有很多问题想要做到这一点。 – runmad 2010-03-10 17:03:30

9

我在文档中找不到它,但我认为这可能是因为您正在使用UINavigationController。

如何设置UINavigationController的委托属性,然后实现UINavigationControllerDelegate?它提供了两种可选方法:

– navigationController:willShowViewController:animated: 
– navigationController:didShowViewController:animated: 

例如,navigationController:willShowViewController:动画:可能是这个样子:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 
    if ([viewController isKindOfClass:[UITableViewController class]]) { 
    [viewController viewWillAppear:animated]; 
    } 
} 

无论如何,这会得到你想要的行为,而无需破解通话以查看威胁出现:遍布您的项目。

0

我看到了同样的问题。我有一个来自IB的简单UIView,我用一个扩展UITableViewController的类来做一个addSubview。

我可以在应用程序中看到TableViewController的视图没有问题,但viewWillAppear函数在这种情况下从来没有被调用过。

+0

我已经了解到,这些委托方法仅针对UIViewController类而被调用。 – runmad 2010-10-29 14:10:11

0

那么,从这个问题链接的讨论有正确的答案。 UINavigationController需要接收“viewWillAppear”消息才能将这些消息发送到您推送到它的视图控制器。

如此讽刺的是,如果你不做Apple推荐的功能,并且你的视图控制器的子类为UINavController,那么一切都很好。然而,如果你只是在你的视图控制器内部创建一个UINavController,那么你需要实现“viewWillAppear”,“viewDidAppear”等,并将这些转发给你的导航控制器。

请注意,如果您使用Three20,这尤其重要,因为它的视图控制器层次结构期望收到“viewWillAppear”消息。如果没有,你可以结束TTTableViews不绘制。

0

如果您使用UITabViewController,则会发生同样的情况。你需要通过实施无论是UITabViewControllerDelegate或UINavigationControllerDelegate回调

相关问题