我正在尝试进行实时聊天,进展顺利,但是我遇到了问题。
我已将一个子视图添加到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
}
答案 0 :(得分:0)
将字符串变量分配给UILabel
的{{1}}属性不会在该字符串和标签之间创建绑定。如果要在用户界面中查看更新的值,则需要更新attributedText
。另外,UI更新必须在主线程上执行;您从网络上获得的更新将在后台线程中传递。
最后,我看不到需要保留一系列状态,您只需要最新状态即可。
您可以重构以创建一个计算变量,该变量为导航栏提供当前用户状态文本。
尚不清楚您打算如何显示显示名称,用户名和状态(有3件事,但只有2行)。我已经完成了三行,您可以根据需要进行调整。
attributedText
答案 1 :(得分:0)
您可以管理以下内容:
首先,创建一个函数来设置添加到viewController的视图或您要添加的任何对象上的所有UI对象。在viewDidLoad()中调用此方法(如setupInitialLayout())。通过在viewDidLoad()中调用此方法,因为您只需要添加一次组件,而无需再次调用此方法。
现在创建另一个方法,在其中编写您的所有代码,就像设置要显示的数据一样。在viewWillAppear()中调用此方法(如setupData())。另外,只要有需要,就可以调用此方法setupData(),就像正在聊天的用户在线并且要显示为“在线”一样,只需调用此方法即可。