从弹出窗口回头看第一个视图控制器VC
更新:尝试了您建议的链接,但无法使其工作。从弹出窗口回头看第一个视图控制器VC
只是为了确认我对它的理解正确,这些是我采取的步骤。
第一个视图控制器被称为FirstViewController,第二个被称为SearchViewController。
- 导入SearchViewController成FirstViewController,并添加
在FirstViewController.m,添加以下: SearchViewController * SVC = [[SearchViewController的alloc] INIT]; svc.delegate = self;
-
在SearchViewController.h我加入:
@protocol SearchViewControllerDelegate
- (无效)setLat:(CLLocationDegrees)LAT setLon:(CLLocationDegrees)LON;
以及委托属性:
@property (assign) id <SearchViewControllerDelegate> delegate;
- 在SearchViewController.m我合成委托,并加入 [self.delegate setLat:51.0000 setLon:-0.10000];
从一些NSLog测试看来,方法setLatSetLon方法本身永远不会被调用。
我正在尝试完成我的大学iPad应用程序。它的目的是提供一个带有注释和MKPolygons覆盖的校园的实时谷歌/苹果地图视图。这一切工作正常。
我现在已经添加了一个按钮,它将一个弹出窗口(第二个视图控制器)加载到校园建筑物的表格(它们本身就是CampusBuilding的对象,坐标存储在该对象中)以及搜索框,以及这很好。我要做的是当用户选择一行时,地图视图集中在特定的建筑物上。我写了一个下面的方法,当我从地图视图控制器本身引用它时,它工作正常。
但我该如何从第二个视图控制器做到这一点?
下面是存在于第一视图控制器的方法,包括:
- (void)setLat:(CLLocationDegrees)lat setLon:(CLLocationDegrees) lon{
MKCoordinateSpan span;
span.latitudeDelta = (double) .003;
span.longitudeDelta = (double).003;
//Define the default region to focus on
MKCoordinateRegion region;
region.span=span;
region.center=CLLocationCoordinate2DMake
(lat,lon);
//set the default region to 'region'
[_mapView setRegion: region animated:YES];
[_mapView regionThatFits:region];
}
现在,在第二视图控制器,它工作正常为表视图控制器。我已经设置好了,所以当用户选择一行时,它会加载一个新的视图。我也尝试启动第一个视图控制器的对象,然后写下: FirstViewController * firstVC;
[firstVC setLat:building.latValue setLon:building.lonValue];
这一切编译但没有运动发生,我想是因为我开始一个新的对象,而不是指一个当前处于活动状态。
有没有办法做到这一点?总是欢迎对我如何改进代码的评论,我对此比较陌生。
谢谢
你说得对,firstVC将是FirstViewController的新实例。不是前一个。
你需要的是使用Objective-C的委托模式。它在这种情况下通常使用。以下是我以前的答案中的两个示例,其中包含有关如何实施的示例代码。
非常好,谢谢。我认为这可能与代表有关,但我仍然没有真正理解授权。我会看看这些链接,我预计我对代表团的理解只会随着经验而改进。感谢你的回答。 – 2012-07-21 17:30:45
感谢您的帮助,遗憾的是我不能得到它的工作。你能看看原始文章中的更新吗? – 2012-07-21 23:58:05
我想你错过了一步:在你的FirstViewController的界面文件--.h文件中,确保你已经包含了这个,如下所示: @interface FirstViewController:UIViewController –
user523234
2012-07-24 00:47:37