2010-10-19 70 views
1

在我的应用程序中,我有一个包含三个按钮和两个标签的自定义UIView子类(让我们称之为MyView)。我将这个视图添加到一个也有一个表视图的视图控制器(我在底部添加MyView的实例)。显示一些控件是UIView的一部分的问题

由于业务逻辑规则,三个标签和一个按钮都隐藏在开头。所以我这样做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后,这样的控件变得可见?我在这里错过了什么?

非常感谢提前!

编辑

我已经将它们设置可见之后添加一些NSLogs和日志显示是这样的:

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

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

回答

2

好的,所以我解决了这个问题。我感动的是设置在另一种方法的控件的可见性的代码,我调用此方法是这样的:

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

那么你知道,通知方法被称为在另一个线程(我不知道这并,我正在使用的图书馆实际上不是我的,并且文档中没有关于这个事实的信息)。

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

谢谢大家!

0

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

+0

我可以确认通知方法被调用,并且在将它们全部设置为可见之后调用setNeedsDisplay,但没有任何结果。 – 2010-10-19 21:18:06