view.hidden = x和[view setHidden:x]之间的区别

时间:2012-05-24 14:08:56

标签: iphone view show-hide

我正在调试一个iphone应用程序,我看到了一些我完全不理解的东西。

根据用户的选择,显示或隐藏UIView。当前代码使用[view setHidden:NO][view setHidden:YES]显示或隐藏视图。这不起作用:视觉上就好像忽略了这些陈述。但是,当我分别将它们更改为view.hidden = NOview.hidden = YES时,一切都按预期工作。

我在想这两种语法是等价的,但显然不是。对于所有其他属性(textfont等),两者的工作方式相同,那么hidden有什么特别之处?

编辑:以下是我的部分代码的复制/粘贴。我正在使用iPhone模拟器5.0在XCode 4.3中工作

这是我项目中的一个例子。

IBOutlet UIView *panel;    //Connected in interface builder

===========

- (void)makePanelVisible:(BOOL)visible
{
    [panel setHidden:!visible];    //this does not work
    panel.hidden = !visible;       //this does work correctly.
}

3 个答案:

答案 0 :(得分:1)

回想起这一点,我记得差不多3年前碰到同样的问题,当时iPhone 3(甚至不是3G)风靡一时。我不确定为什么会这样,但确实如此 - 所以我只是通过使用“点”符号设置属性来处理它。我想,这是其中之一“如果它没有被破坏就不要修复它”(好吧,它有点破碎,但它有一个简单的方法,所以我正在使用它。)

答案 1 :(得分:0)

设置是否隐藏视图。

- (void)setHidden:(BOOL)flag

返回接收者是否标记为隐藏。

- (BOOL)isHidden

隐藏= YES;与setHidden相同:YES;不同的是,你正在隐藏为YES,而seth​​idden视图从它的窗口消失,并且没有接收输入事件,因为它被设置为隐藏。但它仍保留在超级视图的子视图列表中,并像往常一样参与自动调整。

答案 2 :(得分:-1)

hidden是UIView的一个属性。当您编写[panel setHidden:YES]时,您尝试调用应设置隐藏属性的方法setHidden。它不起作用,因为UIView中不存在该方法:https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816

我总是通过编写“view.hidden = x”来设置属性。

我希望它能帮到你