我还有另一个问题,我试图弄清楚如何在不自动滚动的情况下重新加载collectionView。我还意识到在很多其他情况下我需要在集合视图中更改内容。此外,我有一些项目,我将要更改.alpha并更改文本。有没有办法在Swift中完成所有这些工作?例如(具体而言)如果我有一个集合视图,每个单元格中都有一个视图,并且该视图中有一个textField,我可以更改alpha和文本,(甚至更改alpha动画),而无需重新加载整个表格吗?
答案 0 :(得分:1)
查看UICollectionView
的文档。有几个"重新加载"方法:
reloadData()
reloadSections(_:)
reloadItems(at:)
如果您只想重新加载单个项目,请更新数据源的数据,然后调用reloadItems(at:)
传递项目的索引路径。
如果单元格当前可见,则另一个选项是使用cellForItem(at:)
方法获取对现有单元格的引用。然后,您可以根据需要直接访问单元的UI组件。您还应该根据需要更新数据模型,这样如果用户滚动并返回,则单元格将正确呈现。
答案 1 :(得分:0)
最适合您更新特定UIcollectionViewcell的自定义视图的地方是sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('', int(PortEntry_Page2_Text))
sock.bind(server_address)
sock.setblocking(0)
sock.settimeout(1)
sock.listen(1)
EnterToTerminal2("Listening to port "+str(PortEntry_Page2_Text)+"..")
EnterToTerminal2("Waiting for a connection. Press STOP to cancel.")
connected = 0
while (StopButtonStatePage2 == 0 and connected == 0):
try:
connection, client_address = sock.accept()
EnterToTerminal2("Connection from "+ str(client_address)+"..")
connected = 1
except Exception as inst:
template = "An exception of type {0} occured. Arguments:\n{1!r}"
message = template.format(type(inst).__name__,inst.args)
print message
finally:
if (connected == 0):
EnterToTerminal2("No client connected..")
StopButtonStatePage2 = GetStopButtonStatePage2()
###########################################
StopButtonStatePage2 = 0
sock.setblocking(0) ##?
print "xx0 "+str(connected)+" "+str(StopButtonStatePage2)
while (connected == 1 and StopButtonStatePage2 == 0):
a = select.select([sock], [], [], 1) # steelkiwi.com/blog/working-tcp-sockets
if a[0]:##?
data = sock.recv(64) # or connection.recv ??
EnterToTerminal2("Data recv: "+str(data))
StopButtonStatePage2 = GetStopButtonStatePage2()
。
您将使用reloadItemsAtIndexPaths
处理特定项目,而不是整个集合视图。
您可以通过代码中的通知或一些回调来处理它,您可以决定何时更新哪个单元格。
希望它会对你有所帮助。