首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITableViewCell上未显示UIProgressView

UITableViewCell上未显示UIProgressView
EN

Stack Overflow用户
提问于 2012-02-24 01:52:55
回答 3查看 1.4K关注 0票数 0

我在一个包含UIProgressView的iOS情节串连图板上有一个原型单元。

定期执行的后台进程将通知委托它已启动。此委托应使UIProgressView在表单元格上可见,但这并未发生。即使我可以看到委托被调用,它也不会导致UIProgressView出现。

委托方法尝试获取指向UIProgressView的指针,如下所示:

代码语言:javascript
复制
  UIProgressView* view = (UIProgressView*) [[[self tableView:myTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]] contentView] viewWithTag:MyProgressViewTag];

其中,将viewWithTag设置为UIProgressView的标签。

我尝试调用[myTableView reloadData][myTableView setNeedsDisplay]来尝试强制重绘单元格,但没有成功。

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-24 01:59:03

您从tableView的数据源请求一个新的单元格,您得到的单元格不是tableView的一部分。

如果您想要一个已在表视图中的单元格,请询问该单元格的tableview。

试试这个:

代码语言:javascript
复制
UIProgressView* view = (UIProgressView*) [[[myTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]] contentView] viewWithTag:MyProgressViewTag];

并确保从mainThread调用此函数。不能从不是主线程的线程操作UI对象。

票数 3
EN

Stack Overflow用户

发布于 2012-02-24 02:03:37

尝试:

代码语言:javascript
复制
[myTableView performSelectorOnMainThread:@selector(reloadData) withObject:nil];

所有UI操作都必须在主线程上执行。

希望能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2012-02-24 02:05:14

这只是一种猜测,但如果后台进程运行在主线程以外的其他线程上,则UI将不会更新。所有对UIKit的调用都需要在主线程上进行。您可以做的是使用中央分派(GCD)并将一个块分派到主队列。也就是说,在你需要更新UIProgressView的后台进程中。

代码语言:javascript
复制
dispatch_async(dispatch_get_main_queue(),^{
      // your background processes call to the delegate method
});

此项目展示了如何使用GCD:https://github.com/toolmanGitHub/BDHoverViewController从后台进程更新UIProgressView

下面是另一个示例:

代码语言:javascript
复制
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW,0),^{
        NSInteger iCntr=0;
        for (iCntr=0; iCntr<1000000000; iCntr++) {
            if ((iCntr % 1000)==0) {
                dispatch_async(dispatch_get_main_queue(), ^{
                    [blockSelf.hoverViewController updateHoverViewStatus:[NSString stringWithFormat:@"Value:  %f",iCntr/1000000000.0]
                                                           progressValue:(float)iCntr/1000000000.0];
                });
            }

        }

祝好运。

时间

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9418437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档