9

Warte !!!:
Ich weiß, dass Sie denken, diese Frage wurde schon mehrmals gestellt und beantwortet. Aber ich kann garantieren Sie, dass diese Frage einzigartig ist.iOS UIButton - Unterschied zwischen UIButton setUserInteractionEnabled und setEnabled

Frage:
In einem iOS-App vorstellen, nur zwei Tasten gibt es, wie im Bild unten gezeigt, und sie haben zwei Aktionen, die wie eine Hin- und Herschalten Logik verhält.

enter image description here

Und es ist logisch wie folgt sein:

- (IBAction)testBtnClicked:(id)sender { 
    if ([self.testBtn isEnabled]) { 
     [self.testBtn setEnabled:NO]; 
     [self.setInteractionBtn setUserInteractionEnabled:YES]; 
    } else { 
     [self.testBtn setEnabled:YES]; 
     [self.setInteractionBtn setUserInteractionEnabled:NO]; 
    } 
} 

- (IBAction)setInteractionBtnClicked:(id)sender { 
    if ([self.setInteractionBtn isEnabled]) { 
     [self.setInteractionBtn setUserInteractionEnabled:NO]; 
     [self.testBtn setEnabled:YES]; 
    } else { 
     [self.setInteractionBtn setUserInteractionEnabled:YES]; 
     [self.testBtn setEnabled:NO]; 
    } 
} 

So sehe ich keinen großen Unterschied zwischen setEnabled Verfahren und setUserInteractionEnabled Verfahren. Sie verhalten sich wie eine einzige Methode, die den Benutzer daran hindert, sie zu benutzen. Wenn es jedoch gleich ist, wie können wir isEnabledtrue oder false auch dann erkennen, wenn auf False eingestellt ist?

Im Folgenden sind die Gründe, die diese Frage nicht möglich Duplikat einer anderen Q & Ein Thema in SO machen:

  • Auch wenn einige hochrangigen Code markiert haben meine Frage als mögliches Duplikat, dass Q & A gab mir nicht das richtige Verständnis.
  • @danh Wie gesagt,

    Mindestens ein Grund ist, dass eine Benutzerinteraktion während der Animation auf UIViews deaktiviert ist. Es wäre falsch, wenn sich die Steuerelemente während der Animation als ausgegraut ausmalen. Zumindest während der Animation, haben die beiden Eigenschaften unterschiedliche Bedeutungen. Gab mir die echte Antwort oder der Grund zu sehen, dass diese beiden Methoden aus zwei Gründen sind. Weil jeder sagen könnte, dass setUserInteractionEnabled keine Änderungen am UI-Status vornimmt, aber zumindest nur die Antwort von @danh hatte zuerst angegeben, dass sie implizit während UI-Animationen verwendet werden könnte.

+0

Mögliche Duplikat [Was ist besser, setEnabled oder setUserInteractionEnabled?] (Http://stackoverflow.com/questions/15649264/which-is- (besser gesagt, oder besser gesagt: durch eine bessere Benutzertrennung) – HDdeveloper

+0

Eigentlich nicht, weil es darum geht, dass er den Unterschied kennt und dieser Fragebogen nur wissen muss, was aus beiden besser ist, aber ich muss wissen, was genau der Unterschied ist und welcher zu verwenden ist Hoffe, du könntest verstehen, dass es zwei verschiedene Fragen sind :-) –

Antwort

13

Sie sind fast gleich. userInteractionEnabled ist eine Eigenschaft von UIView, die angibt, ob die Ansicht Benutzerberührungen erhält. enabled ist eine Eigenschaft von UIControl (die eine Unterklasse von UIView und eine Oberklasse von UIButton ist) und hat den gleichen Effekt. Ein Unterschied besteht darin, dass sich UIKit-Steuerelemente abhängig von ihrem enabled-Status möglicherweise anders zeichnen, was beim Abstract UIView nicht der Fall ist.

Okay, warum?

Da UIControl Unterklassen beide erben, warum gibt es zwei fast-die gleichen Eigenschaften? Warum lassen Steuerelemente nicht einfach die Idee von "aktiviert" fallen und zeichnen sich anders basierend auf ihrem userInteractionEnabled-Status?

Mindestens einer der Gründe ist, dass die Benutzerinteraktion während der Animation unter UIView deaktiviert ist. Es wäre falsch, wenn sich die Steuerelemente während der Animation grau dargestellt hätten. Zumindest während der Animation haben die zwei Eigenschaften unterschiedliche Bedeutungen.

3

Eigenschaften von aktiviert:

  • Es ist eine Eigenschaft von UIControl
  • Superklasse für UIButton.
  • Es Auswirkungen auf den visuellen Zustand des Objekts und ist im Allgemeinen die bevorzugte Verfahren zur Herstellung eines Steuer

Eigenschaften von userInteractionEnabled zu deaktivieren:

  • Eine Eigenschaft UIView
  • -Code das interagiert mit Ihren Kontrollen ist eher zu prüfen, ob Tasten sind enabled als wenn ihre userInteractionEnabled prope Es ist eingestellt. Es ist konventioneller.
1
@property(nonatomic, getter=isUserInteractionEnabled) BOOL userInteractionEnabled 

Ein boolescher Wert, der bestimmt, ob Benutzerereignisse ignoriert und aus der Ereigniswarteschlange entfernt werden. Bei der Einstellung NEIN werden Benutzerereignisse, z. B. Berührung und Tastatur, für die Ansicht ignoriert und aus der Ereigniswarteschlange entfernt. Wenn diese Option auf YES gesetzt ist, werden Ereignisse normalerweise an die Ansicht übermittelt. Der Standardwert dieser Eigenschaft ist YES.

Diskussion:

Während einer Animation, werden Benutzer-Interaktionen vorübergehend für alle Ansichten in der Animation, unabhängig von dem Wert in dieser Eigenschaft beteiligt deaktiviert. Sie können dieses Verhalten deaktivieren, indem Sie beim Konfigurieren der Animation die Option UIViewAnimationOptionAllowUserInteraction angeben.

Apple Doc on UIView

@property(nonatomic, getter=isEnabled) BOOL enabled 

Ein Boolescher Wert, wird der Empfänger aktiviert bestimmt, ob.

Discussion:

YES Geben Sie die Steuerung aktiviert zu machen; Geben Sie andernfalls NO an, um es zu deaktivieren. Der Standardwert ist JA. Wenn der aktivierte Status NEIN ist, ignoriert das Steuerelement Berührungsereignisse und Unterklassen können unterschiedlich gezeichnet werden.

Für Ihre Referenz:

  1. Apple Doc on UIControl
  2. SO Q&A

Wie @danh heißt es:

„Bei leas Ein Grund ist, dass während der Animation die Benutzerinteraktion in UIViews deaktiviert ist. Es wäre falsch, wenn sich die Steuerelemente während der Animation als ausgegraut ausmalen. So zumindest während der Animation, die beiden Eigenschaften haben unterschiedliche Bedeutungen.“