数据更改后刷新视图

时间:2018-11-25 02:16:13

标签: ios swift

我正在尝试进行实时聊天,进展顺利,但是我遇到了问题。

我已将一个子视图添加到navigationController而不是标题。我在此视图中有头像,用户全名和状态,如whatsapp。我有用户是来自pusher服务的在线字符串,我想在用户全名的子视图底部显示它,如whatsapp。当我从func onPresenceChanged(stateChange方法获取在线字符串时,如何刷新视图?

我添加了self.navbar.setNeedsDisplay(),但是它不起作用。

ChatViewController.swift(我将其裁剪以便快速查看)

include libcc.fs 

7F8095613AE0: 66 6F 6F 6F  00          -                           fooo.
<1> 140190238718688 ld: warning: object file (/usr/lib/bundle1.o) was 
built for newer OSX version (10.4) than being linked (10.3)

<1> 4 


7F80955001D0: 66 6F 6F 6F  00          -                           fooo.
<1> 140190237589968 
<1> 4 

dlsym(0x7f8095500850, gforth_c_labs_n_n): symbol not found
libcc.fs:35: Invalid name argument
-5 >>>labs<<< .s drop cr 
Backtrace:
$10C4BCC40 throw 
$10C4BCE78 link-wrapper-function 

}

2 个答案:

答案 0 :(得分:0)

将字符串变量分配给UILabel的{​​{1}}属性不会在该字符串和标签之间创建绑定。如果要在用户界面中查看更新的值,则需要更新attributedText。另外,UI更新必须在主线程上执行;您从网络上获得的更新将在后台线程中传递。

最后,我看不到需要保留一系列状态,您只需要最新状态即可。

您可以重构以创建一个计算变量,该变量为导航栏提供当前用户状态文本。

尚不清楚您打算如何显示显示名称,用户名和状态(有3件事,但只有2行)。我已经完成了三行,您可以根据需要进行调整。

attributedText

答案 1 :(得分:0)

您可以管理以下内容:

  1. 首先,创建一个函数来设置添加到viewController的视图或您要添加的任何对象上的所有UI对象。在viewDidLoad()中调用此方法(如setupInitialLayout())。通过在viewDidLoad()中调用此方法,因为您只需要添加一次组件,而无需再次调用此方法。

  2. 现在创建另一个方法,在其中编写您的所有代码,就像设置要显示的数据一样。在viewWillAppear()中调用此方法(如setupData())。另外,只要有需要,就可以调用此方法setupData(),就像正在聊天的用户在线并且要显示为“在线”一样,只需调用此方法即可。

相关问题