Swift 3 - UITextView不会更新

时间:2017-05-04 12:07:52

标签: ios swift uitextview

我遇到以下代码的问题:

glTexParameteri()

当我打开此视图并调用方法@IBOutlet var infoBox: UITextView! LibPerso.startGPSLocationService(completion: {(response:Response, location:CLLocation?) -> Void in if(response.hasError()){ //... } if let currentLocation = location, location != nil, location?.coordinate.latitude != 0, location?.coordinate.longitude != 0{ DispatchQueue.main.async { print(self.infoBox.text) //#1 self.infoBox.text = "Lat : \(currentLocation.coordinate.latitude) \r\nLng: \(currentLocation.coordinate.longitude)" print(self.infoBox.text) //#2 } } }) (我的库中的方法;它是获取GPS位置的服务)时,每次返回时,我都成功更新了textView。 问题是,当我更改视图(返回上一个视图)并重新打开此视图时,将调用所有代码,但屏幕上不会更新startGPSLocationService

我有两个打印语句打印以下内容:

  

#1:Lat:48.7922072828896 Lng:10.16013687006524
  #2:Lat:48.7922120134739 Lng:10.16015784907253

因此收件箱字段已正确更新,但在我的屏幕上,没有任何反应。

我已经尝试过infoBoxself.infoBox.setNeedsLayout(),但这也没有改变任何内容。

我认为当我返回并重新打开此视图时,对setNeedsDisplay()的引用会在流量中丢失。

1 个答案:

答案 0 :(得分:0)

很可能与您的描述的这一部分有关:

  

当我更改视图(返回上一个视图)并重新打开此视图时

听起来好像你有ViewControllerOne(VC1)和ViewControllerTwo(VC2)。您的infoBox位于VC2

您可以从VC1导航到VC2 - 可能使用模式或推送segue - 并设置infoBox的文字。

然后您导航回VC1,并在某个时刻“重新开启” VC2 ...此时您会感到惊讶infoBox不再包含先前设置的文本。

这是否相当准确地描述了这种情况?如果是这样,就会出现问题。当您“重新打开此视图”时,您正在创建VC2 实例 - 当然,它不包含您在infoBox中设置的文字。您不仅仅是重新显示旧的。

您需要做的是将文本从VC2传递回VC1,或者创建某种数据类来存储新文本(或者,更好的是,存储新的Lat / Lon值。)