Iphone VIEWWILLISE和VIEWDID未调用
这个问题很常见,但我无法用任何可用的答案来解决它 我正在开发iOS 5.1。我的导航控制器是选项卡栏视图控制器中的一个选项卡。有一个tableview,在其中选择一行将推送新的视图控制器 此问题仅在选择第二行时出现,有时也会出现。这是不正常的。 推送的视图为空-Iphone VIEWWILLISE和VIEWDID未调用,iphone,ios,uinavigationcontroller,uitabbarcontroller,viewwillappear,Iphone,Ios,Uinavigationcontroller,Uitabbarcontroller,Viewwillappear,这个问题很常见,但我无法用任何可用的答案来解决它 我正在开发iOS 5.1。我的导航控制器是选项卡栏视图控制器中的一个选项卡。有一个tableview,在其中选择一行将推送新的视图控制器 此问题仅在选择第二行时出现,有时也会出现。这是不正常的。 推送的视图为空-视图将出现/视图显示未被调用。单击导航栏的后退按钮-根视图的视图将显示/视图显示也不会被调用,使其为空 我以完全相同的方式在选择第一行/第二行时推动视图。但问题只发生在第二排 - (void)tableView:(UITableView
视图将出现
/视图显示
未被调用。单击导航栏的后退按钮-根视图的视图将显示
/视图显示
也不会被调用,使其为空
我以完全相同的方式在选择第一行/第二行时推动视图。但问题只发生在第二排
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
switch (indexPath.row) {
case 0:
AViewController *aObj = [[AViewController alloc] init];
aObj.homeObj = self;
[self.navigationController pushViewController:aObj animated:YES];
[aObj release];
break;
case 1:
BViewController *bVCObj = [[BViewController alloc] init];
bVCObj.homeObj = self;
[self.navigationController pushViewController:bVCObj animated:YES];
[bVCObj release];
break;
default:
break;
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
我试过了,但没有成功
BViewController
时会调用viewDidLoad
,但是,viewwillbeen
和viewdidbeen
不会被调用。以下是我的viewDidLoad
:
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor];
NSLog(@"nav stack: %@", [self.navigationController viewControllers]);
NSLog(@"nav stack: %@", [[self.navigationController visibleViewController] description]);
//some initialization and call of methods
}
如何定义
AViewController
和BViewController
的视图?通常您会使用initWithNibName
,例如
AViewController *aObj = [[AViewController alloc] initWithNibName:@"mynibname" bundle:nil]`
正如Carl指出的,您显然可以只使用init
(虽然我在中没有看到这方面的文档),但是系统将非常详细地说明NIB文件的名称。不过,文档中确实指出,您可以使用initWithNibName
并为NIB名称传递nil
,在这种情况下,它将尝试为您找到它。就个人而言,如果结果不一致,我会尝试使用initWithNibName
并显式传递NIB的名称,看看这是否可以纠正这种情况
或者在两个控制器中使用loadView
以编程方式构建视图?然后您需要向我们展示那些loadView
例程(不要与viewDidLoad
混淆)
但根据文档,您需要指定NIB或使用loadView
。请参阅UIViewController
类参考中的讨论
更新:
根据您的反馈,我有几个想法:
viewDidLoad
[addSubview someNewController.view]
”的事情。如果您在任何上下文中使用视图控制器,而不是(a)您的应用程序代理的初始配置;(b) 呈现视图控制器
(或解除);或者(c)pushViewController
(或pop),然后您可能想分享您所做的事情init
方法将调用initWithNibName:bundle:
传递类名和主包的nib名称,如果OP是通过Xcode对话框添加的,那么它们的nib可能与类同名。因此,在不实现loadView
的情况下,严格来说不需要提供nib名称。但值得检查该OP确实遵循了这个惯例!我不知道。我没有看到UIViewController
类引用中记录了这一点,但我相信你的话。我知道如果你调用initWithNibName
并传递nil
作为nib名称,它会按照你所描述的那样做,但我不知道init
会起作用在,也是。我正在加载带有笔尖的视图。。我尝试使用intwithNibname。但仍然不起作用。@Rob:viewDidLoad在按下BViewController时被调用,但是,ViewWillDisplay和ViewDidDisplay都没有被调用。@Rob:你找到了一些解决方法吗?我仍然无法解决此问题。。这种情况很少发生……但是我发现了这仍然不是一件好事。您所说的“我的导航控制器位于选项卡栏控制器的视图控制器内”是什么意思?导航控制器应该是选项卡栏视图控制器之一,您不需要将其包装在另一个视图控制器中。我指的是导航