IBOutlet不会在UI中显示其值

时间:2014-12-30 12:00:32

标签: ios objective-c swift uilabel iboutlet

我正在使用故事板构建iOS应用程序。我已经使用swift在我的应用程序中实现了谷歌地图,其余代码是在客观C中。

我的情景:

1.如图所示,当我点击位置前面的标签时(在第一个视图控制器中),一个模态segue打开一个包含地图的第二个视图控制器。

2.在地图视图控制器中,当用户通过触摸移动地图时,我在标签中获取地址值。 (类似于超级应用程序)

3.此后,只要用户在此控制器上按下完成按钮,它就会使用自定义segue和位置值返回第一个视图控制器。

enter image description here

问题在于,此标签的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")

    }

2 个答案:

答案 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,瞧,您已完成。

enter image description here

答案 1 :(得分:0)

尝试将该位置存储为主机视图控制器的NSString强属性,或者从地图向主机视图发布通知 在主机的viewWillAppear中, 首先NSLog NSString和 第二步 - 将此字符串作为文本

分配给标签