我试图在用户点击注释时推送视图,我有以下代码:
- (void) mapView: (MKMapView *) mapView annotationView:(MKAnnotationView *) view calloutAccessoryControlTapped:(UIControl *) control
{
childController = [[NeighborProfileViewController alloc] initWithNibName:@"NeighborProfileViewController" bundle:nil];
childController.title = view.annotation.title;
childController.uid = [((NeighborMapAnnotation *)(view.annotation)) uid];
[self.navigationController pushViewController:childController animated:YES];
}
我知道代码在这个片段中执行,因为我试图打印出一些东西而且它确实打印了。但是,为什么不改变我已经推动的观点的观点?
这是因为这个视图实际上是主视图的子视图,它实际上有导航控制器吗?如果是这种情况,那么我该如何解决这个问题。这是加载subView的代码:
-(IBAction) toggleAction:(id) sender {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
if(self.navigationItem.rightBarButtonItem.title == @"List"){
self.navigationItem.rightBarButtonItem.title = @"Map";
[mapViewController.view removeFromSuperview];
}else {
[self.view addSubview:mapViewController.view];
[self.view sendSubviewToBack:self.view];
self.navigationItem.rightBarButtonItem.title = @"List";
}
[UIView commitAnimations];
}
换句话说,calloutAccessoryControlTapped位于mapViewController
中答案 0 :(得分:0)
您的代码不足以回答以下问题:
您的导航控制器是否已初始化?
即使您正在呼叫self.navigationController
,如果它是nil
,那么也不会发生任何事情。
是否正确拼写了xib名称?如果您使用不正确的xib名称将控制器推入导航堆栈,则可能不会抛出错误,并且您的控制器不会被推入堆栈。< / p>
编辑:
在显示初始视图之前,需要创建UINavigationController的实例。以下是呈现模态视图的示例:
YourViewController* rootViewController; /* however you are creating the initial view */;
UINavigationController navController =
[[UINavigationController alloc] initWithRootViewController:rootViewController];
[rootViewController release];
[self presentModalViewController:navController animated:YES];
[navController release];
答案 1 :(得分:0)
你的mapviewcontroller没有对navigationcontroller的引用。你的主视图控制器。所以你需要做的是将导航控制器的引用传递到maview控制器上,然后将视图推到那个控制器上。如果您有任何问题,请告诉我