Sie wissen, dass es in Cocoa dieses Ding gibt, zum Beispiel können Sie ein erstellen UIViewund tun:
view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
Ich habe einen Brauch UIViewmit mehreren Zuständen, den ich folgendermaßen definiert enumhabe:
enum DownloadViewStatus {
FileNotDownloaded,
FileDownloading,
FileDownloaded
};
Für jede erstellte Unteransicht setze ich Folgendes tag:subview1.tag = FileNotDownloaded;
Dann habe ich einen benutzerdefinierten Setter für den Ansichtsstatus, der Folgendes ausführt:
for (UIView *subview in self.subviews) {
if (subview.tag == viewStatus)
subview.hidden = NO;
else
subview.hidden = YES;
}
Aber was ich versuche zu tun , ist dies zuzulassen:
subview1.tag = FileNotDownloaded | FileDownloaded;
Also subview1taucht meine in zwei Zuständen meiner Ansicht nach auf. Derzeit wird es in keinem dieser beiden Zustände |angezeigt , da der Operator die beiden Aufzählungswerte zu addieren scheint.
Gibt es eine Möglichkeit, das zu tun?
(subview.tag == viewStatus)Aussehen falsch zu mir. Sollte sein((subview.tag & viewStatus) != 0x0), es sei denn, Sie möchten nur die genaue Übereinstimmung überprüfen. In diesem Fall würden Sie überhaupt keine Bitmaske benötigen, sondern nur eine einfache alte Aufzählung. Siehe zweite Hälfte meiner Antwort.