天道酬勤,学无止境

UICollectionViewCell 中的标签文本未更新(Label text in UICollectionViewCell not updating)

问题

我试图在UICollectionViewCell加载后,在点击button时更改UICollectionViewCell UILabel的文本。 但标签不会在屏幕上更新。 控制台显示标签的 text 属性已更新,但似乎没有使用新文本重新绘制标签。

这是UICollectionViewCells一个已知问题吗? 也许是某种缓存问题? 我是否需要reload单元格或整个集合视图才能显示更新?

回答1

因为单元格已经加载了,单元格在重新加载之前不会发生变化,所以你可以重新加载整个集合视图[self.collectionView reloadData];

或者只有一个/多个单元格受到数据更改的影响

[self.collectionView reloadItemsAtIndexPaths: indexpathArray];

但请确保在重新加载单元格之前正确更改数据

回答2

我遇到了类似的情况,collectionView 单元格中的 UILabel 更新得很好。 然后在对故事板进行一些修改后,以编程方式更新值时 UILabel 不会更改。 正如在最初的问题中所指出的,即使调试终端显示连接的 UILabel 属性文本正在更新,该值仍保持默认值。

这是我解决问题的方法。 在故事板中,

  1. 删除了 UILabel 的引用出口(在“显示连接检查器”中)
  2. 从故事板中删除了 UILabel
  3. 重新添加了 UILabel
  4. 将引用插座重新连接到 swift 文件代码属性

不知何故,一切又开始正常了。

作为旁注:Radwa 答案的 swift 3.1 版本是:

collectionView.reloadItems(at: [indexPath]) // single cell in the collection view
collectionView.reloadData() // entire collection view

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 单元格标签文本在单元格中重叠(Cell Label text overlapping in cells)
    问题 我正在尝试将UILabel添加到我的collectionViewCell 。 但是,在几个单元格文本开始与之前单元格的数据重叠之后。 更新:这似乎只发生在我的手机(iphone 5)上,而不是在模拟器上(2013 macbook air)。 如这里所见: 我正在以编程方式实现整个视图。 该问题似乎与collectionview任何元素无关,因此我认为该问题也适用于表视图。 我不确定我是否遗漏了以下内容: if(cell == nil) {// do something } 如果是这样,有人可以解释一下这是做什么的吗? 如果这不是问题,我真的不确定是什么原因造成的。 我也在使用NSMutableAttributedString ,但这也不是问题,因为我试图插入一个普通字符串并得到相同的结果。 我的代码: - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath
  • UICollectionView 中的 UILabel 重载(UILabel overloading in UICollectionView)
    问题 我正在使用UICollectionView 。 每次我使用此代码时,集合视图中的标签都会超载 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath]; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(5.0, 90.0,90.0, 21.0)]; [label setTag : indexPath.row]; label.text = [NSString stringWithFormat:@"%@",[arrImages objectAtIndex:indexPath.row]]; label.textColor = [UIColor redColor]; label.backgroundColor = [UIColor clearColor]; label.font
  • 初始化 UICollectionViewCell 时 viewWithTag 返回 nil(viewWithTag returns nil when initializing a UICollectionViewCell)
    问题 刚刚开始使用UICollectionView 。 我使用 IB 在UIViewController创建了一个简单的UICollectionView 。 它随着分页水平滚动。 我把一个简单的UICollectionViewCell里面UICollectionView 。 我为单元设置了重用标识符。 我把一UILabel与里面的100标签UICollectionViewCell 。 在viewDidLoad ,我调用: [_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Thing"]; 后来我尝试像这样初始化单元格: - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Thing" forIndexPath:indexPath]; cell.backgroundColor =
  • 致命错误:解开Optional值时意外发现nil [重复](Fatal error: unexpectedly found nil while unwrapping an Optional values [duplicate])
    问题 这个问题已经在这里有了答案: “致命错误:在展开可选值时意外发现nil”是什么意思? (11个答案) 4年前关闭。 我在Swift中使用的是UICollectionView ,但是当我尝试更改单元格标签的文本时得到了提示。 func collectionView(collectionView: UICollectionView!, numberOfItemsInSection section: Int) -> Int { return 5 } func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell! { var cell = collectionView.dequeueReusableCellWithReuseIdentifier("title", forIndexPath: indexPath) as TitleCollectionViewCell // Next line: fatal error: unexpectedly found nil while unwrapping an Optional value cell.labelTitle.text = "This is
  • 为什么UICollectionViewCell的出口为零?(Why is UICollectionViewCell's outlet nil?)
    问题 我在接口生成器中创建了一个自定义UICollectionViewCell,将其上的视图绑定到该类,然后当我想使用字符串并将其设置为字符串上的标签时,tha标签的值为nil。 override func viewDidLoad() { super.viewDidLoad() // Register cell classes self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls") } override func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell! { var cell: LeftMenuCollectionViewCell cell = collectionView.dequeueReusableCellWithReuseIdentifier("ls", forIndexPath: indexPath) as LeftMenuCollectionViewCell println(cell.label) // <- this is
  • 标签文字未更新(Label text not updated)
    问题 我有一个带有状态栏的 Windows 窗体,它显示了应用程序的当前状态。 我有一个名为 AppState 的类,它更新了状态栏中的标签,并在处理时将状态更改回“就绪”。 在代码中,当我执行以下操作时: using (AppState state = new AppState("Processing...")) { //Do some work that take some seconds } 但标签保持不变。 我没有得到任何例外。 标签文本已更新,但在 UI 上它继续显示以前的值。 我在这里错过了什么吗? santosc 你是对的,那是我唯一在做的事情。 这是 AppState 代码 public class AppState : IDisposable { static string Default = "Ready"; public AppState(string status) { Form.StatusLabel.Text = status; } public void Dispose() { Form.StatusLabel.Text = Default; } } 回答1 总是一样的... 如果你想开始一些需要一段时间的事情,不要在你的 GUI 线程中做,否则你的 GUI 会冻结(没有标签更新,没有调整大小,没有移动,什么都没有)。 用 Application
  • 在UITableView中使用自动布局以获取动态单元格布局和可变的行高(Using Auto Layout in UITableView for dynamic cell layouts & variable row heights)
    问题 如何在表格视图的UITableViewCell使用自动布局,以使每个单元格的内容和子视图确定行高(自身/自动),同时保持流畅的滚动性能? 回答1 TL; DR:不喜欢阅读? 直接跳转到GitHub上的示例项目: iOS 8示例项目-需要iOS 8 iOS 7示例项目-适用于iOS 7+ 概念描述 无论您针对哪个iOS版本开发,以下前两个步骤均适用。 1.设置和添加约束 在UITableViewCell子类中,添加约束,以使单元格的子视图的边缘固定到单元格contentView的边缘(最重要的是顶部和底部边缘)。 注意:不要将子视图固定到单元格本身; 仅对单元格的contentView ! 让这些子视图的内在内容大小驱动表格视图单元格的内容视图的高度,方法是确保每个子视图的内容压缩阻力和垂直方向上的内容包含约束都不会被添加的更高优先级约束所覆盖。 (嗯?点击这里。) 请记住,其想法是使单元的子视图垂直连接到单元的内容视图,以便它们可以“施加压力”并使内容视图扩展以适合它们。 使用带有几个子视图的示例单元格,这是一些(不是全部!)约束需要看起来像的视觉插图: 您可以想象,随着在上面的示例单元格中将更多文本添加到多行主体标签中,它将需要垂直增长以适合文本,这将有效地迫使单元格高度增加。 (当然,您需要正确设置约束条件才能使其正常工作!) 正确使用约束绝对是使用“自动版图
  • 切换视图后计时器标签未更新(swift)(Timer Label not updated after switching views (swift))
    问题 我正在为 iPhone 开发一个计时器应用程序。 但是当切换视图并返回初始计时器视图时, label不会更新。 虽然我可以看到它仍在打印日志中运行。 我的viewDidLoad有下面的代码。 当我再次进入timer视图时,如何再次开始刷新label ? 另一个视图是通过 Segue 处理的。 func updateTime() { var currentTime = NSDate.timeIntervalSinceReferenceDate() //Find the difference between current time and start time. var elapsedTime: NSTimeInterval = currentTime - startTime //calculate the minutes in elapsed time. let minutes = UInt8(elapsedTime / 60.0) elapsedTime -= (NSTimeInterval(minutes) * 60) //calculate the seconds in elapsed time. let seconds = UInt8(elapsedTime) elapsedTime -= NSTimeInterval(seconds) //find out the
  • UICollectionView-动态单元格高度? [复制](UICollectionView - dynamic cell height? [duplicate])
    问题 这个问题已经在这里有了答案: UICollectionView,全宽单元格,是否允许自动布局动态高度? (16个回答) 1年前关闭。 我需要显示一堆具有不同高度的collectionViewCells。 视图太复杂了,我不想手动计算期望的高度。 我想执行自动布局以计算像元高度 在cellForItemAtIndexPath之外调用dequeueReusableCellWithReuseIdentifier会破坏collectionView并使它崩溃 另一个问题是该单元格不在单独的xib中,因此我无法手动实例化一个临时单元格并将其用于高度计算。 有什么解决办法吗? public func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { var cell = collectionView.dequeueReusableCellWithReuseIdentifier(cellIdentifier, forIndexPath: indexPath) as UICollectionViewCell
  • PyQt4 GUI中的标签未随FOR循环的每个循环更新(Label in PyQt4 GUI not updating with every loop of FOR loop)
    问题 我遇到了一个问题,我希望使用GUI从python程序中运行几个命令行功能。 我不知道我的问题是否特定于PyQt4,或者是否与我对Python代码的错误使用有关。 我希望做的是在我的GUI上有一个标签,以更改其文本值以通知用户正在执行哪个命令。 但是,当我使用for循环运行多个命令时,就会出现我的问题。 我希望标签在每个循环中都进行更新,但是,该程序不是在每个循环中都更新GUI标签,而是仅在整个for循环完成后才更新自身,并且仅显示最后执行的命令。 我在我的GUI环境中使用PyQt4。 而且我已经确定标签的文本变量确实在每个循环中都进行了更新,但是实际上并没有在GUI中直观地显示出来。 有没有办法强迫我自己更新标签? 我已经在循环中尝试过update()和repaint()方法,但是它们没有任何区别。 我真的很感谢您的帮助。 谢谢你。 罗尼 这是我正在使用的代码: # -*- coding: utf-8 -*- import sys, os from PyQt4 import QtGui, QtCore Gui = QtGui Core = QtCore # ================================================== CREATE WINDOW OBJECT CLASS class Win(Gui.QWidget): def _
  • 使用 UICollectionViewCell 上的按钮显示数组中的数据(Use a button on a UICollectionViewCell to display data from an array)
    问题 我有一个NSStrings数组,一个UILabel和一个UICollectionView 。 我的问题: 我想要数组的计数来确定有多少UICollectionViewCell 。 每个UICollectionViewCell包含一个按钮。 单击后,我希望此按钮使与UICollectionViewCell的编号对应的数组中的数据显示在标签中。 例如,如果用户单击第 13 个UICollectionViewCell的按钮,则数组中的第 13 个NSString将成为UILabel的文本。 我做了什么: 我已经作出了自己的子类UICollectionViewCell的笔尖文件,我使用所有的UICollectionViewCell S,与连接按钮.h文件作为IBAction 。 我还导入了MainViewController.h ,它包含存储NSString的数组属性。 当我在UICollectionViewCell的操作中编辑代码时,我无法访问数组属性。 该按钮确实有效 - 我在IBAction的方法中放置了一个 NSLog,它确实有效。 我在 SO 上搜索了数十个其他答案,但没有一个回答我的具体问题。 如果需要,我可以用我的代码示例更新它。 回答1 我为我用于所有 UICollectionViewCells 的 nib 文件创建了自己的 UICollectionViewCell
  • 更改为服务器端时如何获取标签文本?(How do I get text of label when changed to server side?)
    问题 我试图在不回发时将标签文本分配给隐藏字段,但我失败了。 这就是我所做的。 If Not IsPostBack Then Dim structPayperiod As strcPayperiodDet structPayperiod = objTimeSystem.getCurrentPayPeriod() hdnPayperiodseq.Value = structPayperiod.Payperiodid hdnPayPeriodStartDt.Value = structPayperiod.startdate.ToString lblPayPeriodStartDt.Text = structPayperiod.startdate displayPayrollIdOrgs(objTimeSystem.getPayrollIDOrgs()) grd_Employees.Visible = False RptErrorsMessages.DataSource = objTimeSystem.getErrorMessages() RptErrorsMessages.DataBind() Else hdnPayPeriodStartDt.Value = lblPayPeriodStartDt.Text.ToString End If 问题出现在 else 子句中
  • 如何为UILabel添加换行符?(How to add line break for UILabel?)
    问题 让我们看看我的字符串看起来像这样: NSString *longStr = @"AAAAA\nBBBBB\nCCCCC"; 我该如何做,以便UILabel像这样显示消息 美国AAAA BBBBBB 中华总商会 我不认为\n可以被UILabel识别,所以我可以在NSString中放入任何内容,以便UILabel知道必须在其中创建换行符吗? 回答1 与在字符串中使用时一样使用\n 。 将numberOfLines设置为0以允许任意数量的行。 label.numberOfLines = 0; 使用sizeWithFont:更新标签框架以匹配文本的大小。 如果不这样做,您的文本将垂直居中或被截断。 UILabel *label; // set frame to largest size you want ... CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:label.frame.size lineBreakMode:label.lineBreakMode]; label.frame = CGRectMake( label.frame.origin.x, label.frame.origin.y, label.frame.size.width, labelSize.height)
  • UITableView 部分页眉和部分页脚未更新(重绘问题)(UITableView section header and section footer not updating (redraw problem))
    问题 更新 4.0 似乎 iOS 4.0 在这里改变了一些东西。 根据我的第一次快速检查,在所描述的场景中为部分标题产生不正确背景的相同代码正在使用 4.0! 原来的 我有一个带有自定义页眉和页脚视图的 UITableView 分组样式。 在页脚里面我放了一个 UILabel 和一个 UIButton。 单击按钮隐藏或显示一些行,更新页脚视图中的 UILabel 并最终调整页脚视图的大小。 基本上一切正常。 但是标签的文本不会在屏幕上更新。 它在 UILabel 文本属性中更新,但只有当我将节页脚滚动到可见区域之外并将其向后滚动时,它才会更新。 所以这是一个典型的 UITableView 重绘问题。 我尝试了所有方法来强制更新,例如需要布局等。没有任何帮助。 我看到了一些相关的问题,但有一些不同的行为并且没有解决方案。 任何帮助/想法? 谢谢,盖德 更新: 我的问题出现在节页脚上,所以这里是我的 viewForFooterInSection。 基本上我想折叠/展开一个部分,但不是完全(这是一件容易的事情),而只是空单元格(ItemSize 为空)。 footerView 折叠时很大,展开时会缩小。 此外,标签文本将更改。 - (UIView *)tableView: (UITableView *)tableView viewForFooterInSection:
  • 集合视图中单元格中的UIButton未收到事件内部的补全(UIButton in cell in collection view not receiving touch up inside event)
    问题 以下代码表达了我的问题:(它是自包含的,因为您可以使用空模板创建一个Xcode项目,替换main.m文件的内容,删除AppDelegate.h / .m文件并进行构建) // // main.m // CollectionViewProblem // #import <UIKit/UIKit.h> @interface Cell : UICollectionViewCell @property (nonatomic, strong) UIButton *button; @property (nonatomic, strong) UILabel *label; @end @implementation Cell - (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.label = [[UILabel alloc] initWithFrame:self.bounds]; self.label.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; self.label.backgroundColor = [UIColor greenColor]
  • 从另一个线程更新标签(Update label from another thread [duplicate])
    问题 这个问题已经在这里有了答案: 跨线程Winforms控件编辑[重复] (1个答案) 8年前关闭。 我使用在另一个类中编写的线程来更新标签。 标签是Winform Main类中的内容。 Scanner scanner = new Scanner(ref lblCont); scanner.ListaFile = this.listFiles; Thread trd = new Thread(new ThreadStart(scanner.automaticScanner)); trd.IsBackground = true; trd.Start(); while (!trd.IsAlive) ; trd.Join(); 怎么看,我将label的引用传递给第二个类的构造函数。 在第二类(扫描仪)中,我有一个称为“ automaticScanner”的方法,该方法应使用以下代码更新标签: public Scanner(ref ToolStripStatusLabel _lblContatore) { lblCounter= _lblContatore; } Thread threadUpdateCounter = new Thread(new ThreadStart(this.UpdateCounter)); threadUpdateCounter.IsBackground =
  • 分享最全Python之tkinter—GUI(图形用户界面)文档!!!(未完成持续更新ing)
    基于tkinter的GUI界面编程 文章目录 基于tkinter的GUI界面编程 1.1GUI简介 1.2 tkinter库 1.3 tkinter 简介 1.4 导入tkinter库 1.4 创建图形用户界面步骤 2.1 tkinter 库中的组件 2.2 布局组件 3.1 常用组件 3.2 标签组件 3.3 文本框组件 3.4 菜单栏组件 3.4 选择性组件 4.1 时间处理机制 4.1.1 什么是事件 1.常用的键盘和鼠标事件 2.常用的窗口事件 1.1GUI简介 图形用户界面(Graphical User Interface, GUI, 又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。 图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其他一一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。图形用户界面由窗口、下拉菜单、对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相同的操作总是以同样的方式来完成,在图形用户界面,用户看到和操作的都是图形对象。 1.2 tkinter库 (1) tkinter:tkinter 模块(tk 接口)是Python的标准tkGUl工具包的接口。tk
  • 从UI线程强制进行GUI更新(Force GUI update from UI Thread)
    问题 在WinForms中,如何从UI线程强制立即进行UI更新? 我正在做的大致是: label.Text = "Please Wait..." try { SomewhatLongRunningOperation(); } catch(Exception e) { label.Text = "Error: " + e.Message; return; } label.Text = "Success!"; 在操作之前,标签文本未设置为“ Please Wait ...”。 我使用另一个线程解决了这个问题,但是它变得繁琐,我想简化代码。 回答1 最初,我想知道为什么OP尚未将其中一个答案标记为答案,但是在我自己尝试并且仍然无法正常工作之后,我更深入地挖掘了一下,发现这个问题还有很多,然后我首先应该。 通过阅读类似的问题可以获得更好的理解:为什么不控制中间过程的更新/刷新 最后,作为记录,我可以通过执行以下操作来更新标签: private void SetStatus(string status) { lblStatus.Text = status; lblStatus.Invalidate(); lblStatus.Update(); lblStatus.Refresh(); Application.DoEvents(); } 尽管从我的理解来看,这远远不是一种优雅而正确的方法。
  • Jetpack Compose - TextField
    Jetpack Compose - TextField 1、属性一览2、使用示例3、版本更新4、未解决问题 Compose系列文章,请点原文阅读。原文,是时候学习Compose了! 1、属性一览 关于输入框,官方提供了两种类型,TextField和OutlinedTextFiedl。 先看下两种输入框最简单的效果,上面是普通的TextField效果,跟之前的EditText默认效果一致,第二种是OutlinedTextField效果,带有一个边框: 首先看下TextField的两个函数,链接在这里: @Composable fun TextField( value: String, onValueChange: (String) -> Unit, modifier: Modifier = Modifier, textStyle: TextStyle = AmbientTextStyle.current, label: () -> Unit = null, placeholder: () -> Unit = null, leadingIcon: () -> Unit = null, trailingIcon: () -> Unit = null, isErrorValue: Boolean = false, visualTransformation
  • 测试标签溢出(Test for Label overrun)
    问题 我有一个多行标签,其文本可能会溢出。 如果这样做,我想减小字体大小,直到它没有超出,或者直到它达到某个最小大小。 这有望使标签更改大小,直到整个字符串可见。 我的问题是我不知道如何测试文本是否溢出。 我已尝试测试以查看标签的文本是否以椭圆字符串结尾,但我相信椭圆在技术上并未添加到标签的 textProperty 中。 那么有谁知道测试这个的好方法吗? 回答1 简短而令人失望的答案:您根本无法以可靠的方式做到这一点。 稍微长一点的答案是,标签本身甚至不知道它是否溢出。 每当调整标签大小时,皮肤类 ( LabeledSkinBase ) 负责更新显示的文本。 然而,这个类使用 JavaFX utils 类来计算椭圆形文本。 这里的问题是,如果标签的尺寸需要,相应的方法只返回一个椭圆形的字符串。 皮肤本身永远不会被告知文本是否实际上是椭圆形的,它只是将显示的文本更新为返回的结果。 您可以尝试检查皮肤类的显示文本,但它是受保护的。 所以你需要做的是LabelSkin ,并实现类似的东西: package com.sun.javafx.scene.control.skin; import java.lang.reflect.Field; import javafx.scene.control.Label; @SuppressWarnings("restriction") public