在我的应用程序中,我有一个自定义的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
因此,根据日志,它们应该是可见的。
答案 0 :(得分:2)
好的,所以我解决了这个问题。我在另一个方法中移动了设置控件可见性的代码,我将这个方法称为:
[self performSelectorOnMainThread:@selector(updateControls) withObject:nil waitUntilDone:NO];
所以你知道,通知方法是在另一个线程中调用的(我不知道这个,我使用的库实际上不是我的,文档中没有关于这个事实的内容)。
无论如何,它现在很好用。
全部谢谢!
答案 1 :(得分:0)
您确认已通知您的通知方法吗?您不需要专门刷新视图,但如果您确定调用了方法,则还可以尝试将[self.myView setNeedsDisplay];
添加到通知方法中。