我正在使用故事板构建iOS应用程序。我已经使用swift在我的应用程序中实现了谷歌地图,其余代码是在客观C中。
我的情景:
1.如图所示,当我点击位置前面的标签时(在第一个视图控制器中),一个模态segue打开一个包含地图的第二个视图控制器。
2.在地图视图控制器中,当用户通过触摸移动地图时,我在标签中获取地址值。 (类似于超级应用程序)
3.此后,只要用户在此控制器上按下完成按钮,它就会使用自定义segue和位置值返回第一个视图控制器。
问题在于,此标签的iboulet隐藏在UI中,并且不显示其值。但是当我在控制台中打印此值时,我能够显示该值。
以下是我的代码。非常感谢帮助。
使用swift编写的第一个视图控制器代码:
- (void)viewDidLoad {
[super viewDidLoad];
_Locationlabel.text=_location;
NSLog(@"location=%@",_Locationlabel.text);
}
第二视图控制器代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "locationDone") {
// pass data to next view
var svc = segue.destinationViewController as Host;
svc.location = self.addressLabel.text;
println("location\(svc.location)");
}
}
@IBAction func doTap(x:UIButton) {
self.dismissViewControllerAnimated(true, completion: {});//This is intended to dismiss the Info sceen.
println("pressed")
}
答案 0 :(得分:1)
您不应该使用自定义segue返回第一个视图控制器。 Segues始终创建视图控制器的新实例(除非您使用展开segue)。在第一个视图控制器中,添加以下方法:
- (IBAction)backFromMapView:(UIStoryboardSegue *)segue
{
NSLog(@"and we are back");
MapViewController* mvc = (MapViewController *)segue.sourceViewController;
NSLog(@"location %@", mvc.addressLabel.text);
}
请勿忘记#import <YourProjectName>-Swift.h
,以便Host.m
了解MapViewController
。
然后,您可以控制从地图视图控制器中的Done
按钮拖动到故事板中视图控制器上方栏中的橙色退出图标。在弹出窗口中,您可以选择backFromMapView
,瞧,您已完成。
答案 1 :(得分:0)
尝试将该位置存储为主机视图控制器的NSString强属性,或者从地图向主机视图发布通知 在主机的viewWillAppear中, 首先NSLog NSString和 第二步 - 将此字符串作为文本
分配给标签