Ios 为什么userInteractionEnabled属性不适用于特定的UIButton?

Ios 为什么userInteractionEnabled属性不适用于特定的UIButton?,ios,objective-c,uibutton,alpha,setuserinteractionenabled,Ios,Objective C,Uibutton,Alpha,Setuserinteractionenabled,这可能是我处理过的最令人沮丧的情况,它可能有最简单的解决方案 我有一个ui按钮storeB,它在调用我的UIViewController的viewdiload:过程中被正确初始化。在创建按钮之前,我创建了5个其他按钮 在viewdiload:期间,我运行了名为setupFBConditions的方法,该方法确定我的forwardB按钮对象的alpha值是否应为0.5,并将userInteractionEnabled设置为0。在这种情况下,按钮的外观和执行方式与预期相同(本质上,就像它不在那里一样

这可能是我处理过的最令人沮丧的情况,它可能有最简单的解决方案

我有一个
ui按钮
storeB
,它在调用我的
UIViewController
viewdiload:
过程中被正确初始化。在创建按钮之前,我创建了5个其他按钮

viewdiload:
期间,我运行了名为
setupFBConditions
的方法,该方法确定我的
forwardB
按钮对象的
alpha
值是否应为0.5,并将
userInteractionEnabled
设置为0。在这种情况下,按钮的外观和执行方式与预期相同(本质上,就像它不在那里一样)

此外,在对我的
UIView
对象之一执行此特定动画期间,我决定将我的
restartB
对象的
userInteractionEnabled
属性设置为0(以便在动画期间不发生交互。该性能也很成功

然而,当我决定写:

storeB.userInteractionEnabled = NO;
storeB.alpha = 0.5;
在动画开始时(打算保持此状态直到游戏结束或再次点击
restartB
),以及
NSLog
按钮对象,日志显示
userInteractionEnabled
属性是
NO
,而
alpha
是0.5,就像它应该的那样。但是,这些属性在任何时候都不会反映到UI中

storeB
甚至不是添加到层次结构的最后一个视图(尽管它是最后一个
ui按钮
)。我不知道这些更改为什么没有生效

我不打算发布更多的代码,因为除了上面的两行代码之外,没有什么可以发布的。这显然是一个简单的问题+解决方案

************更新**************

这是我的一个滑动手势动作(在
storeB.userInteractionEnabled=NO;
之后)结束时的日志报告:


帧是正确的,alpha和交互设置是正确的,superview帧(0,0320568)正是它应该的样子

***********第二次更新**************


如果有人认为这很有用,请检查
\u retainCount
您的
UIView
/
UIButton
属性,看看在考虑对对象所做的所有操作时,它是否看起来异常高。我的retain count本应为2,但却为4,因此每次我都更改了该属性(关于我认为是我的第一个实例的
storeB
),它实际上只影响第二个实例(我甚至不知道它存在)。

这两行代码在哪里?您需要通过提供更多代码来提供更多的上下文。许多问题如下所示:“我有一个视图的句柄,当我对它做一些事情时,它不会反映在UI中”。大多数情况下,原因是你没有一个在UI中查看的视图的句柄。它是nil或其他一些视图。NSLog storeB并查看(a)它是否为非nil,(b)superview是视图控制器的视图,以及(c)如果框架有意义。除了@danh所说的之外,有时在进行一些更改后还必须重新布局视图。引擎盖下的绘图顺序工作并不总是直观的。请尝试添加[storeB LayoutFneed];在你的更改下。如果你正在访问你认为是的按钮,这可能会起作用。如果你像danh建议的那样访问nil,它对你没有任何作用。对于@danh和@Jake t,我在帖子中提供了一个更新,看看是否有什么奇怪的地方。对我来说,没有任何东西看起来不合适,帧值是正确的,属性设置是正确的很好。我尝试了
[storeB layoutifneed]
,但没有成功。我最初的假设是
storeB
在我的代码的动画部分之后丢失了它的值,但事实并非如此。”它实际上只影响了第二个实例(我甚至不知道存在)。“这是您签入的视图的一个示例,代码不是您在UI上看到的视图。这两行代码在哪里?您需要通过提供更多的代码来提供更多的上下文。许多问题如下所示:“我有一个视图的句柄,当我对它做一些操作时,UI中没有反映某些内容”。大多数情况下,原因是您没有在UI中查看的视图的句柄。它可能是nil或其他视图。请登录storeB,查看(a)它是否为非nil,(b)superview是视图控制器的视图,以及(c)如果框架有意义。除了@danh所说的之外,有时在进行一些更改后还必须重新布局视图。引擎盖下的绘图顺序工作并不总是直观的。请尝试添加[storeB LayoutFneed];在你的更改下。如果你正在访问你认为是的按钮,这可能会起作用。如果你像danh建议的那样访问nil,它对你没有任何作用。对于@danh和@Jake t,我在帖子中提供了一个更新,看看是否有什么奇怪的地方。对我来说,没有任何东西看起来不合适,帧值是正确的,属性设置是正确的很好。我尝试了
[storeB layoutifneed]
,但没有成功。我最初的假设是
storeB
在代码的动画部分后丢失了它的值,但事实并非如此。“它实际上只影响了第二个实例(我甚至不知道存在)。”这是您在代码中签入的视图的示例,而不是您在UI上看到的视图。
<UIButton: 0x1585ae80; frame = (270 8; 42 42); alpha = 0.5; opaque = NO; 
userInteractionEnabled = NO; layer = <CALayer: 0x15899da0>>  
<UIView: 0x1592bba0; frame = (0 0; 320 568); layer = <CALayer: 0x15934ae0>>