从弹出框 VC 中返回第一个视图控制器

Posted

技术标签:

【中文标题】从弹出框 VC 中返回第一个视图控制器【英文标题】:Referring back to first view controller from a popover VC 【发布时间】:2012-07-21 15:01:55 【问题描述】:

更新:尝试了您建议的链接,但无法正常工作。

只是为了确认我理解正确,这些是我采取的步骤。

第一个视图控制器称为FirstViewController,第二个称为SearchViewController。

    将SearchViewController导入FirstViewController,并添加

    在 FirstViewController.m 中,添加以下内容: SearchViewController *svc =[[SearchViewController alloc] init]; svc.delegate =self;

    在 SearchViewController.h 中我添加了:

    @protocol SearchViewControllerDelegate

    (void)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];

这一切都编译了,但没有发生任何动作,我假设是因为我正在启动一个新对象,而不是引用当前处于活动状态的对象。

有没有办法做到这一点?欢迎评论我如何改进代码,我对此比较陌生。

谢谢

【问题讨论】:

【参考方案1】:

你说得对,firstVC 将是 FirstViewController 的一个新实例。不是上一个。

您需要的是使用 Objective-C 的委托模式。在这种情况下通常使用它。这是我之前的 SO 答案中的两个示例,其中包含有关如何实现的示例代码。

how to resume timer when poping to view2

Calling a method from another class in Objective C

【讨论】:

太好了,谢谢。我在想这可能与代表有关,但我仍然不太了解正确的委派。我会看看这些链接,我预计我对委派的理解只会随着经验的增加而提高。感谢您的回答。 感谢您的帮助,遗憾的是我无法让它工作。请您看一下原帖中的更新吗? 我想你又错过了一步:在你的 FirstViewController 的接口文件 - .h 文件中,确保你已经包含了这个 ,就像这样:@interface FirstViewController : UIViewController 跨度> 我做了,就像这样:@interface FirstViewController : UIViewController 当我有更多时间时,我将不得不建立一个新项目来测试它。我已经阅读了更多内容,您的解决方案更有意义,所以我会接受这个答案。谢谢

以上是关于从弹出框 VC 中返回第一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

从弹出框呈现模态视图控制器

从弹出控制器推送视图控制器

从弹出视图控制器 Swift 中转接

从弹出窗口呈现视图

在弹出窗口中呈现模态视图

如何从弹出视图中关闭第二个视图控制器