【发布时间】:2013-04-16 12:32:52
【问题描述】:
你知道在 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),除非您只想检查精确匹配。在这种情况下,您首先不需要位掩码,而只需要一个普通的旧枚举。请参阅我的答案的后半部分。
标签: objective-c c cocoa enums bitmask