问题解决了!请参阅底部的代码。
我想在两个控制器之间传递一些数据。我有加载GoogleMap的MainViewController类。点击每个GMap标记的自定义信息窗口,我想打开包含地点详细信息的新窗口。 我的故事板是:
Segue被命名为:showPlaceDetails:
写了几种方法:
- (void) mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker {
[self performSegueWithIdentifier:@"showPlaceDetails" sender: nil];
}
(我也尝试使用sender: [marker snippet]
)。
我的prepareForSegue方法:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showPlaceDetails"]) {
//[[segue destinationViewController] setDelegate:self];
PlaceDetailsViewController *destViewController = segue.destinationViewController;
//Pass some data
}
}
但我收到了消息: 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'Receiver(RelaxInKZViewController)没有带标识符的segue'showPlaceDetails''
我做了以下步骤:
没什么。我希望你能帮帮我 :) Thx,Artem。
Mr_bem建议我拒绝segues并使用pushViewController方法。很好!
UIStoryboard *iPhoneStoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
PlaceDetailsViewController *destViewController = [iPhoneStoryboard instantiateViewControllerWithIdentifier:@"PlaceDetailsViewController"];
destViewController.placeData = marker.placeData;
[self.navigationController pushViewController:destViewController animated:NO];
答案 0 :(得分:3)
您正在使用Push segue,这只能使用navigationController执行,例如:
[self.navigationController performSegueWithIdentifier:@"showPlaceDetails" sender: nil];
请注意,在ViewController之前应该有一个导航控制器,即推送控制器。
或者如果你愿意,你可以将它的类型更改为模态,一切都应该适合你(Y)
<强>更新强>
好的,这是我的建议,删除segue,将PlaceDetailsViewController的storyboardID从IB放到PlaceDetailsViewController,然后添加此代码
- (void) mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker {
PlaceDetailsViewController *destViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PlaceDetailsViewController"];
[self.navigationController pushViewController:destViewController animated:YES]
se
}
这必须工作! LOL!
答案 1 :(得分:0)
您需要将RelaxInKZViewController
嵌入UINavigationController
内以使用push
segue
。选择RelaxInKZViewController-&gt;从顶部菜单中选择Editor->Embed In->Navigation Controller
。我想这会解决你的问题。