你知道在Cocoa中有这样一件事,例如你可以创建一个
UIView
并执行以下操作:view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
我有一个自定义的UIView
,它具有多个状态,我已经在enum
中定义如下:
enum DownloadViewStatus {
FileNotDownloaded,
FileDownloading,
FileDownloaded
};
对于每个创建的子视图,我都会设置它的tag
:subview1.tag = FileNotDownloaded;
然后,我有一个自定义的视图状态设置方法,它会执行以下操作:
for (UIView *subview in self.subviews) {
if (subview.tag == viewStatus)
subview.hidden = NO;
else
subview.hidden = YES;
}
但是我试图做的事情,就是允许这样:
subview1.tag = FileNotDownloaded | FileDownloaded;
所以我的subview1
在我的视图的两个状态中都会显示。目前,由于|
运算符似乎是将这两个枚举值相加,因此它并不在这两种状态下显示。
有没有办法解决这个问题?
(subview.tag == viewStatus)
看起来有问题。应该是((subview.tag & viewStatus) != 0x0)
,除非你想要完全匹配。如果是这种情况,你就不需要使用位掩码了,只需要一个普通的枚举即可。详情请参见我的答案的后半部分。 - Regexident