在执行另一个方法时(动态)更新标签文本

2024-03-21

我是一名 iOS 开发人员,目前正在开发 iPhone 应用程序。我有一个关于更新 ViewController 内容的简单问题,如果我能得到了解此问题的人的反馈或有建议的解决方案,我将不胜感激。

我正在编写一种方法,不断更新标签的文本(以及其他组件,例如 UIImage “box1” 和 “box2” 的背景颜色)。

问题:对标签文本的更新(以及其他更改)仅在代码执行结束时生效。所以我写了一个简单的无限循环,如下所示:

-(void) stateTest{
    int i=0;
    for(;;){
       if (i==5) {
          self.stateLabel.text=@"Opened"; //stateLabel previously declared
          [self.box2 setBackgroundColor:[UIColor whiteColor]]; // box2 declared as UIImage
          [self.box1 setBackgroundColor:[UIColor purpleColor]];
        }
        if (i==10){
            self.stateLabel.text=@"Closed";
            [self.box2 setBackgroundColor:[UIColor redColor]];
            [self.box1 setBackgroundColor:[UIColor whiteColor]];
            break;
        }
        i++;
    }

}

在 viewDidLoad 方法中:

- (void)viewDidLoad
{       
    [super viewDidLoad];
    self.stateLabel.text=@“View did Load";
    [self.box1 setBackgroundColor:[UIColorwhiteColor]];
    [self.box2 setBackgroundColor:[UIColorwhiteColor]];   
    [self stateTest];

}

我正在单步执行代码(断点),这是我面临的问题:

  1. 当 i==5 时,标签文本不会更新(与框的颜色相同)
  2. 当 i==10 时,标签文本不会更新
  3. 代码执行完毕后会显示更新(标签文本和框颜色) 状态标签:“已关闭”, 方框2:红色背景色

我尝试在 stateTest 方法末尾(在 i++ 之后)调用几个函数,希望它能够“REFRESH” 视图、标签和/或 UIImage 的内容:

    [self.stateLabel setNeedsLayout];
    [self.stateLabel setNeedsDisplay];
    [self.box1 setNeedsDisplay];
    [self.box2 setNeedsDisplay];
    [self.view setNeedsDisplay];

不幸的是,这些试验都没有奏效。我还放置了一个 NSLog 来输出标签的文本,并且效果很好,如我所愿。但问题在于在执行代码/方法期间视图控制器内容的动态更新。

我将非常感谢任何帮助,并且我愿意接受任何建议

Ideally,该代码与检测嘴部状态的人脸检测算法并行使用。有一个 processImage 方法可以每帧处理图像。每次处理图像时我都会调用[self stateTest];如果嘴张开 → stateLabel.text=@”Open”...等

预先感谢您的贡献 干杯!


仅当运行循环完成时才会发生 UI 更新。通常我在后台线程中运行无限循环并在主线程中发布 UI 更新。这将处理运行循环。

下面的代码供参考。

    -(void) viewDidLoad
    {
        [super viewDidLoad];
        self.subView = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 30, 30)];
        self.subView.backgroundColor = [UIColor blueColor];

        [self.view addSubview:self.subView];



        dispatch_queue_t newQueue = dispatch_queue_create("newQueue", nil);
        dispatch_async(newQueue, ^{
            [self stateTest];
        });

    }

    -(void) stateTest{
        int i=0;
        for(;;){
            if (i==5) {
                [self performSelectorOnMainThread:@selector(purpleColor) withObject:self waitUntilDone:NO];

            }
            if (i==10){
                [self performSelectorOnMainThread:@selector(blueColor) withObject:self waitUntilDone:NO];
              //  break;
            }
            if (i==15){
                [self performSelectorOnMainThread:@selector(redColor) withObject:self waitUntilDone:NO];
                //break;
            }
            if (i==20){
                [self performSelectorOnMainThread:@selector(greenColor) withObject:self waitUntilDone:NO];
                break;
            }
            sleep(1);
            i++;
        }
    }

    -(void) purpleColor
    {
        [self.subView setBackgroundColor:[UIColor purpleColor]];
    }

    -(void) blueColor
    {
        [self.subView setBackgroundColor:[UIColor blueColor]];
    }

    -(void) redColor
    {
         [self.subView setBackgroundColor:[UIColor redColor]];
    }

    -(void) greenColor
    {
        [self.subView setBackgroundColor:[UIColor greenColor]];
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在执行另一个方法时(动态)更新标签文本 的相关文章

随机推荐

  • 如何在Python中使用kivy启用/禁用TextInput编辑

    我有一段代码 1 TextInput 值应该显示 但首先它不应该是可编辑的 单击相应的 CheckBox 后 TextInput 将可编辑 2 使用迭代 Label 和 TextInput 应该获得值 Label 和 TextInput 的
  • Android Espresso:“未找到测试”、“进程崩溃”

    当使用 Espresso 测试我的 Android 应用程序时 我注意到运行配置为All in Module运行时找不到测试All in Package成功了 我创建了以下可重现的案例 使用向导使用 minSdk 8 和空 Activity
  • IntelliJ 自动替换双引号字符串

    I am using IntelliJ IDEA for Angular 6 Typescript development When new import is added automatically by IntelliJ it s al
  • 操作栏菜单项文本颜色

    如何更改菜单项标题的文本颜色 我尝试将其更改如下 但它仅更改操作栏标题文本的颜色 而不更改菜单项文本的颜色 尝试这样的事情
  • 指定的控制器无效(错误) - Zend Framework

    我总是收到这个错误 blub libraries Zend Controller Dispatcher Standard php 中出现异常 Zend Controller Dispatcher Exception 消息为 指定的控制器无效
  • 我什么时候应该重写 Equals 函数? [复制]

    这个问题在这里已经有答案了 可能的重复 Java 总是覆盖等于 https stackoverflow com questions 1549553 java always override equals 我应该覆盖equals我创建的任何类
  • Python:Numpy 将数组的每一行与另一个数组的每一行相乘

    我知道对此存在一些疑问 这应该可以通过广播实现 但不知怎的 我真的不明白广播如何通过添加附加轴来工作 还有一个类似的问题 其中一个数组的每一列与另一个数组的每一列相乘 将每一列与每一列相乘 https stackoverflow com q
  • Flowtype - 如何编写类工厂的声明,例如骨干模型?

    广泛的谷歌搜索和阅读 Flow 文档和示例并没有显示 Javascript 中非常常见的模式的任何示例 具有返回类的函数 一个典型的例子是 Backbone var User Backbone Model extend getFullNam
  • 为什么 DOCUMENT_ROOT 与远程服务器上的 realpath('.') 不同

    with echo realpath br echo dirname FILE br echo realpath dirname FILE br echo SERVER PHP SELF br echo getcwd 我总是得到 servi
  • 如何检查 CLI 程序是否正在等待来自 stdin 的输入?

    如何检查我刚刚使用 CreateProcess 启动的 CLI 程序是否正在等待来自 Windows C API 的标准输入的输入 正如上面的一些评论所说 一旦程序已经开始等待 您就无法检查程序是否正在等待标准输入 您可以使用事件处理程序
  • 2 个文档在 MongoDB 中合并

    我需要从 MongoDB 中不同集合的两个文档中获取数据 其中有 1 个公共字段 对数据库没有更改 我是新手 请帮助我 a db users find username email protected cdn cgi l email pro
  • 使用 JQuery 从另一个网站获取 HTML:可能吗?合法的?

    我正在尝试从不在同一域中的网页获取 HTML 代码 html 文本被解析并总结了在 HTML 代码来源的页面上找到的食谱 食谱名称 主要成分 步骤数 然后 用户可以单击该链接并转到域外的该网页来查看菜谱 我知道同源策略 但这是否适用于从国内
  • 使用 Chrome 打开正文中包含 HTML 的 Outlook

    虽然我已经从 Stack 中找到了很多这方面的信息 特别是here https stackoverflow com questions 5620324 mailto with html body 我只是想绝对确定在 Chrome 中无法执行
  • 嵌套哈希中的 Form_tag 参数

    我有一个没有与之关联的模型的表单 所以我正在使用form tag而不是form for 正如预期的那样 当用户提交表单时 每个字段都包含在 params 哈希中 但表单会发生很大变化 我希望在 params 哈希中包含一个哈希 该哈希将保存
  • .Net 3.5 中 Dynamic 关键字的使用

    我使用 net v4 5 在 Visual Studio 2013 中编写了这段代码 我遇到的问题是 我现在必须降级到 net v3 5 而动态关键字会抛出错误 因为缺少程序集引用 net v3 5 中是否有与 动态 等效的类型 或者有什么
  • Python Curses 不清除屏幕

    我想在Python下使用Curses而不清除屏幕 原因是我希望我的应用程序在现有屏幕上弹出一个简单的小菜单并很快退出 退出时将弹出菜单中丑陋的部分保留在屏幕上是可以接受的 但不是首选 我们的想法是将其用于快速实用的系统管理应用程序和脚本 其
  • 我的拉取请求已合并,下一步该做什么?

    我最近参与了 GitHub 的一个项目 我做了以下事情 分叉原始存储库 将其克隆到我的本地计算机 创建一个分支来修复现有错误 修复该分支中的错误 将该分支推送到我的存储库 向存储库的作者发送拉取请求以合并我的fix分支到其主分支 这是我第一
  • 如何在C++中输出变量的二进制值

    我的 C 编程课上有一项作业 要求编写一个输出变量值的二进制值的函数 例如 如果我将 a 的值设置为字符 我应该得到 a 输出的二进制值 我的 C 教授并不是全世界最伟大的 而且我在使用他给我们的神秘示例来使我的代码正常工作时遇到了困难 现
  • 在 LINQ 中学习表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您可以推荐哪些有关 LINQ 表达式树的文章 教程 Link https learn microsof
  • 在执行另一个方法时(动态)更新标签文本

    我是一名 iOS 开发人员 目前正在开发 iPhone 应用程序 我有一个关于更新 ViewController 内容的简单问题 如果我能得到了解此问题的人的反馈或有建议的解决方案 我将不胜感激 我正在编写一种方法 不断更新标签的文本 以及