有没有办法直接访问UICollectionView元素而无需重新加载?

时间:2016-10-13 15:11:30

标签: ios swift uicollectionview reloaddata

我还有另一个问题,我试图弄清楚如何在不自动滚动的情况下重新加载collectionView。我还意识到在很多其他情况下我需要在集合视图中更改内容。此外,我有一些项目,我将要更改.alpha并更改文本。有没有办法在Swift中完成所有这些工作?例如(具体而言)如果我有一个集合视图,每个单元格中都有一个视图,并且该视图中有一个textField,我可以更改alpha和文本,(甚至更改alpha动画),而无需重新加载整个表格吗?

2 个答案:

答案 0 :(得分:1)

查看UICollectionView的文档。有几个"重新加载"方法:

  1. reloadData()
  2. reloadSections(_:)
  3. reloadItems(at:)
  4. 如果您只想重新加载单个项目,请更新数据源的数据,然后调用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处理特定项目,而不是整个集合视图。 您可以通过代码中的通知或一些回调来处理它,您可以决定何时更新哪个单元格。

希望它会对你有所帮助。