问题显示一些控件是UIView的一部分

时间:2010-10-19 21:04:11

标签: iphone cocoa-touch uiview

在我的应用程序中,我有一个自定义的UIView子类(让我们称之为MyView),它包含三个按钮和两个标签。我将此视图添加到视图控制器,该视图控制器也有一个表视图(我在底部添加了MyView实例)。

由于业务逻辑规则,标签和三个中的一个按钮在开头隐藏。所以我在viewDidLoad中执行此操作:

self.myView.label1.hidden = YES;
self.myView.label2.hidden = YES;
self.myView.button1.hidden = YES;

工作正常。所以这三个是隐藏的,剩下的两个按钮是可见的。

现在,这个视图控制器也是另一个类的委托。在某个时间点,在另一个类中发生事件,该类在我的视图控制器中调用通知方法。

在这个通知方法中,我现在要显示隐藏的控件。所以我显然尝试了以下内容:

self.myView.label1.hidden = NO;
self.myView.label2.hidden = NO;
self.myView.button1.hidden = NO;

但它不起作用,它们不会出现。

知道我做错了什么吗?在此之后我是否需要以某种方式“重新绘制”self.myView以使控件变得可见?我在这里缺少什么?

非常感谢提前!

修改

我在设置可见后添加了一些NSLog,日志显示如下:

label1.hidden = 0
label2.hidden = 0
button1.hidden = 0

因此,根据日志,它们应该是可见的。

2 个答案:

答案 0 :(得分:2)

好的,所以我解决了这个问题。我在另一个方法中移动了设置控件可见性的代码,我将这个方法称为:

[self performSelectorOnMainThread:@selector(updateControls) withObject:nil waitUntilDone:NO];

所以你知道,通知方法是在另一个线程中调用的(我不知道这个,我使用的库实际上不是我的,文档中没有关于这个事实的内容)。

无论如何,它现在很好用。

全部谢谢!

答案 1 :(得分:0)

您确认已通知您的通知方法吗?您不需要专门刷新视图,但如果您确定调用了方法,则还可以尝试将[self.myView setNeedsDisplay];添加到通知方法中。