UIButton enable

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • jesse.james schrieb:

    Sodele, jetzt hab ich es mal in folgende Variante geändert:

    Quellcode

    1. - (void) enableLoginForm: (bool) switchBool {
    2. if (switchBool == NO) {
    3. usernameTextField.textColor = [UIColor grayColor];
    4. passwordTextField.textColor = [UIColor grayColor];
    5. } else {
    6. usernameTextField.textColor = [UIColor blackColor];
    7. passwordTextField.textColor = [UIColor blackColor];
    8. }
    9. usernameTextField.enabled = switchBool;
    10. passwordTextField.enabled = switchBool;
    11. loginButton.enabled = switchBool;
    12. loginButton.enabled = switchBool;
    13. }
    Alles anzeigen


    Und immer noch das selbe Problem.

    'Das selbe Problem' bedeutet immer noch:
    In der Abfrage werden die Farben richtig gesetzt, außerhalb werden weder die Textfelder noch die Buttons deaktiviert.
    Sehe ich das richtig?

    Gegenprobe, also Testfelder und Buttons in der Abfrage zu aktivieren und deaktivieren funktioniert aber korrekt.
    Habe ich das soweit richtig verstanden?
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Lucas de Vil schrieb:

    Gegenprobe, also Testfelder und Buttons in der Abfrage zu aktivieren und deaktivieren funktioniert aber korrekt.
    Habe ich das soweit richtig verstanden?


    Jein, folgende Version funktioniert mit dem deaktivieren:

    Quellcode

    1. - (void) enableLoginForm: (bool) switchBool {
    2. if (switchBool == NO) {
    3. usernameTextField.textColor = [UIColor grayColor];
    4. passwordTextField.textColor = [UIColor grayColor];
    5. } else {
    6. usernameTextField.textColor = [UIColor blackColor];
    7. passwordTextField.textColor = [UIColor blackColor];
    8. }
    9. [usernameTextField setEnabled:NO];
    10. [passwordTextField setEnabled:NO];
    11. [loginButton setEnabled:NO];
    12. [registerButton setEnabled:NO];
    13. }
    Alles anzeigen


    Aber dann bleiben sie logischerweise dekativiert.

    Und folgendes funktioniert auch nicht. Hier werden die Textfelder in ihrer Farbe zwar verändert ABER sie werden nicht deaktiviert genauso wenig wie die Buttons:

    Quellcode

    1. - (void) enableLoginForm: (bool) switchBool {
    2. if (switchBool) {
    3. usernameTextField.textColor = [UIColor blackColor];
    4. passwordTextField.textColor = [UIColor blackColor];
    5. [usernameTextField setEnabled:YES];
    6. [passwordTextField setEnabled:YES];
    7. [loginButton setEnabled:YES];
    8. [registerButton setEnabled:YES];
    9. } else {
    10. usernameTextField.textColor = [UIColor grayColor];
    11. passwordTextField.textColor = [UIColor grayColor];
    12. [usernameTextField setEnabled:NO];
    13. [passwordTextField setEnabled:NO];
    14. [loginButton setEnabled:NO];
    15. [registerButton setEnabled:NO];
    16. }
    17. }
    Alles anzeigen
    * »Es ist sehr gut denkbar, daß
    * die Herrlichkeit des Lebens um jeden und immer in ihrer
    * ganzen Fülle bereit liegt, aber verhängt, in der Tiefe, unsichtbar,
    * sehr weit. Aber sie liegt dort, nicht feindselig, nicht widerwillig,
    * nicht taub. Ruft man sie mit dem richtigen Wort,
    * beim richtigen Namen, dann kommt sie. Das ist das Wesen
    * der Zauberei, die nicht schafft, sondern ruft.«
    *
    * Kafka
  • macmoonshine schrieb:

    Hast Du mal einen Breakpoint in die Methode gesetzt? Warum rätst Du lieber, anstatt den Debugger zu verwenden?


    Ich verwende den Debugger ja. Aber wenn ich die Attribute mit NO oder YES setze dann sind sie ja richtig angewendet. Und er switchBool wird auch richtig übergeben bzw. ausgeführt.
    * »Es ist sehr gut denkbar, daß
    * die Herrlichkeit des Lebens um jeden und immer in ihrer
    * ganzen Fülle bereit liegt, aber verhängt, in der Tiefe, unsichtbar,
    * sehr weit. Aber sie liegt dort, nicht feindselig, nicht widerwillig,
    * nicht taub. Ruft man sie mit dem richtigen Wort,
    * beim richtigen Namen, dann kommt sie. Das ist das Wesen
    * der Zauberei, die nicht schafft, sondern ruft.«
    *
    * Kafka
  • macmoonshine schrieb:

    Wird denn die Methode vielleicht mehrmals aufgerufen oder gibt es andere Stellen, an denen die Buttons (de-)aktiviert werden?


    Es gibt zwei Stellen an der die Methode aufgerufen wird. Einmal beim Absenden des Buttons und einmal wenn die Notification ausgeführt wird. Ich hab jetzt mal den Aufruf in der Notification Methode deaktiviert jetzt werden sie deaktiviert und bleiben es dann auch. D.h. ja, das meine Theorie stimmt, das die Notification Methode teilweise schon vorgeladen bzw. teilweise ausgeführt wird. Aber das ergibt doch eigentlich keinen Sinn.
    * »Es ist sehr gut denkbar, daß
    * die Herrlichkeit des Lebens um jeden und immer in ihrer
    * ganzen Fülle bereit liegt, aber verhängt, in der Tiefe, unsichtbar,
    * sehr weit. Aber sie liegt dort, nicht feindselig, nicht widerwillig,
    * nicht taub. Ruft man sie mit dem richtigen Wort,
    * beim richtigen Namen, dann kommt sie. Das ist das Wesen
    * der Zauberei, die nicht schafft, sondern ruft.«
    *
    * Kafka
  • Okay, hab's herausgefunden. Bei Notifications scheint es irgendwie so zu sein das Attributveränderungen, die in einer zusätzlichen Methode ausgelagert sind, direkt ausgeführt werden.
    Ich hab folgenden Code jetzt mal in die Notification Methode geschrieben und es funktioniert mit dem de- bzw. aktivieren:

    Quellcode

    1. [usernameTextField setEnabled:YES];
    2. [passwordTextField setEnabled:YES];
    3. [loginButton setEnabled:YES];
    4. [registerButton setEnabled:YES];
    * »Es ist sehr gut denkbar, daß
    * die Herrlichkeit des Lebens um jeden und immer in ihrer
    * ganzen Fülle bereit liegt, aber verhängt, in der Tiefe, unsichtbar,
    * sehr weit. Aber sie liegt dort, nicht feindselig, nicht widerwillig,
    * nicht taub. Ruft man sie mit dem richtigen Wort,
    * beim richtigen Namen, dann kommt sie. Das ist das Wesen
    * der Zauberei, die nicht schafft, sondern ruft.«
    *
    * Kafka
  • Könnte es vielleicht daran liegen das der View erst später aktualisiert wird? Die Attribute werden wahrscheinlich direkt ausgeführt, aber der View wird erst später refreshed so das die Eigenschaft direkt da ist sprich das enablen.
    * »Es ist sehr gut denkbar, daß
    * die Herrlichkeit des Lebens um jeden und immer in ihrer
    * ganzen Fülle bereit liegt, aber verhängt, in der Tiefe, unsichtbar,
    * sehr weit. Aber sie liegt dort, nicht feindselig, nicht widerwillig,
    * nicht taub. Ruft man sie mit dem richtigen Wort,
    * beim richtigen Namen, dann kommt sie. Das ist das Wesen
    * der Zauberei, die nicht schafft, sondern ruft.«
    *
    * Kafka
  • Ich hab jetzt mal einen anderen Ansatz verfolgt und zwar den, den macmoon... mir empfohlen hatte mit dem View. Er wird aktiviert und auch deaktiviert aber...viel zu früh. Ich kann die Textfelder schon verändern bevor die Daten vom Server wieder da sind bzw. verarbeitet sind und wenn ich das dann tue, crashed das App da die Daten im Textfeld nicht mehr die selben sind. Okay, gut - das könnte man ja ändern aber das ist ja nicht Sinn der Sache. Ich hab es jetzt mit einer Animation versucht zu lösen aber diese wird auch viel zu früh ausgelöst.

    Vielleicht denke ich ja auch ganz falsch und hier könnte mir einer mal einen anderen Ansatz vorschlagen. Hat hier schon einer mit einem Login gearbeitet und den View gesperrt? Wenn ja wie wurde das gelöst?
    * »Es ist sehr gut denkbar, daß
    * die Herrlichkeit des Lebens um jeden und immer in ihrer
    * ganzen Fülle bereit liegt, aber verhängt, in der Tiefe, unsichtbar,
    * sehr weit. Aber sie liegt dort, nicht feindselig, nicht widerwillig,
    * nicht taub. Ruft man sie mit dem richtigen Wort,
    * beim richtigen Namen, dann kommt sie. Das ist das Wesen
    * der Zauberei, die nicht schafft, sondern ruft.«
    *
    * Kafka
  • jesse.james schrieb:

    Könnte es vielleicht daran liegen das der View erst später aktualisiert wird? Die Attribute werden wahrscheinlich direkt ausgeführt, aber der View wird erst später refreshed so das die Eigenschaft direkt da ist sprich das enablen.

    Rischtisch: UIKit-Operationen werden in der Regel nie sofort ausgeführt, sondern erst dann, wenn die App in die Runloop zurückkehrt. Langandauernde Operationen solltest Du also immer im Hintergrund ausführen. Wie lädst Du Deine Daten vom Server?
    „Meine Komplikation hatte eine Komplikation.“
  • Morgen,

    Die werden in die interne Queue geschoben und im Hintergrund abgearbeitet (mir fällt der genaue Name nicht ein, sitze gerade nicht vor dem Mac). Es läuft also schon im Hintergrund ab, nur das View, das ich jetzt drüber geschoben habe wird viel zu früh deaktiviert so das ich die Werte schon ändern kann bevor die Daten wieder da oder bearbeitet sind.
    * »Es ist sehr gut denkbar, daß
    * die Herrlichkeit des Lebens um jeden und immer in ihrer
    * ganzen Fülle bereit liegt, aber verhängt, in der Tiefe, unsichtbar,
    * sehr weit. Aber sie liegt dort, nicht feindselig, nicht widerwillig,
    * nicht taub. Ruft man sie mit dem richtigen Wort,
    * beim richtigen Namen, dann kommt sie. Das ist das Wesen
    * der Zauberei, die nicht schafft, sondern ruft.«
    *
    * Kafka
  • macmoonshine schrieb:

    Meinst Du vielleicht NSOperationQueue?


    Ja, genau das war sie.

    Der ViewController wird per NSNotification benachrichtigt und führt danach die Notwendigen Operationen aus.
    * »Es ist sehr gut denkbar, daß
    * die Herrlichkeit des Lebens um jeden und immer in ihrer
    * ganzen Fülle bereit liegt, aber verhängt, in der Tiefe, unsichtbar,
    * sehr weit. Aber sie liegt dort, nicht feindselig, nicht widerwillig,
    * nicht taub. Ruft man sie mit dem richtigen Wort,
    * beim richtigen Namen, dann kommt sie. Das ist das Wesen
    * der Zauberei, die nicht schafft, sondern ruft.«
    *
    * Kafka
  • Zur Zeit ist es noch eine Operation die abläuft. Klar, werden zwei in die Queue geschoben wenn ich mehrmals auf den Button drücken - was aber nicht sein soll.
    Sobald die Daten da sind, wird ein Delegate auf der Datenverarbeitenden Instanz ausgeführt, Daten werden verarbeitet und danach eine Notification ausgelöst.
    Ich erkenne unteranderem daran, das der View zu früh deaktiviert wird, das eine Status Meldung der Daten auf dem Login View erst viel später ausgelöst wird. Und, diese wird in der gleichen Notification Methode angestoßen, die auch den drüberliegenden lock View wieder deaktiviert.
    * »Es ist sehr gut denkbar, daß
    * die Herrlichkeit des Lebens um jeden und immer in ihrer
    * ganzen Fülle bereit liegt, aber verhängt, in der Tiefe, unsichtbar,
    * sehr weit. Aber sie liegt dort, nicht feindselig, nicht widerwillig,
    * nicht taub. Ruft man sie mit dem richtigen Wort,
    * beim richtigen Namen, dann kommt sie. Das ist das Wesen
    * der Zauberei, die nicht schafft, sondern ruft.«
    *
    * Kafka
  • jesse.james schrieb:

    Ich erkenne unteranderem daran, das der View zu früh deaktiviert wird, das eine Status Meldung der Daten auf dem Login View erst viel später ausgelöst wird. Und, diese wird in der gleichen Notification Methode angestoßen, die auch den drüberliegenden lock View wieder deaktiviert.

    Mir fallen da spontan drei Möglichkeiten ein:
    1. Es wird von irgendeiner anderen Stelle der Lockview auch deaktiviert.
    2. Zwischen Deaktivierung des Lockviews und der Anzeige der Statusmeldung wird eine weitere, lang dauernde Operation ausgeführt.
    3. Es wird nach der Auslösung der Statusmeldung eine länger dauernde Operation im Vordergrund ausgeführt, so dass die Anzeige durch Cocoa erst später erfolgen kann.
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    Es wird von irgendeiner anderen Stelle der Lockview auch deaktiviert.


    Hab ich überprüft, ist es nicht.

    macmoonshine schrieb:

    Zwischen Deaktivierung des Lockviews und der Anzeige der Statusmeldung wird eine weitere, lang dauernde Operation ausgeführt.


    Da wird nur die Statusmeldung verändert. Und das ist nur ein setzen des Textfield.textes

    macmoonshine schrieb:

    Es wird nach der Auslösung der Statusmeldung eine länger dauernde Operation im Vordergrund ausgeführt, so dass die Anzeige durch Cocoa erst später erfolgen kann.


    Das überprüfe ich jetzt mal.
    * »Es ist sehr gut denkbar, daß
    * die Herrlichkeit des Lebens um jeden und immer in ihrer
    * ganzen Fülle bereit liegt, aber verhängt, in der Tiefe, unsichtbar,
    * sehr weit. Aber sie liegt dort, nicht feindselig, nicht widerwillig,
    * nicht taub. Ruft man sie mit dem richtigen Wort,
    * beim richtigen Namen, dann kommt sie. Das ist das Wesen
    * der Zauberei, die nicht schafft, sondern ruft.«
    *
    * Kafka
  • Also, zu letzerem Punkt...kann ja eigentlich auch nicht sein, da der LockView ausgeblendet (hab da eine animation daraus gemacht, weil ich dachte dann wird der Screen refreshed) aber die Statusmeldungen noch nicht angezeigt werden. Dann dauert es noch mal 2 - 3 Sekunden bis diese erscheinen. Wenn ich in dieser Zeit den Text ändere im Benutzer- oder Passwort Feld - crashed das App - logischerweise.
    Wie ich schon sagte, das läuft alles in einer kleinen Notification Methode ab - wo keine großartigen Berechnungen vorgenommen werden. Ich poste sie einfach mal, das ist vielleicht einfacher.

    Quellcode

    1. - (void) userControlStatusRefresh: (NSNotification *) notification {
    2. enum UserControlStatus userControlStatus = [[[notification userInfo] objectForKey:@"ResponcedMessage"] intValue];
    3. NSLog(@"ERRORCODE NOTIFICATION: %@", [[notification userInfo] objectForKey:@"ResponcedMessage"]);
    4. NSLog(@"M-E-S-S_A-G_E: %i",userControlStatus);
    5. [console sayTheConsole:@"InterfaceLoginClass::notification methode"];
    6. UILabel *labelStatus = (UILabel *)[self.view viewWithTag:130];
    7. [self enableLoginForm:YES];
    8. switch (userControlStatus) {
    9. case UserControlStatusAccepted:
    10. labelStatus.text = @"";
    11. //[[self parentViewController] dismissModalViewControllerAnimated:YES];
    12. break;
    13. case UserControlStatusNotAccepted:
    14. labelStatus.text = NSLocalizedString(@"Username or Password not Accepted", @"Login Interface");
    15. break;
    16. case UserControlStatusNoConnection:
    17. labelStatus.text = NSLocalizedString(@"Server offline", @"Login Interface");
    18. break;
    19. case UserControlStatusClientToOld:
    20. labelStatus.text = NSLocalizedString(@"Check Client Version", @"Login Interface");
    21. break;
    22. case UserControlStatusClientToYoung:
    23. labelStatus.text = NSLocalizedString(@"Check Client Version", @"Login Interface");
    24. break;
    25. case UserControlStatusNotAcceptedAccountClosed:
    26. labelStatus.text = NSLocalizedString(@"Account Closed", @"Login Interface");
    27. break;
    28. case UserControlStatusNotAcceptedAccountNotConfirmed:
    29. labelStatus.text = NSLocalizedString(@"Email not Confirmed within 24h", @"Login Interface");
    30. break;
    31. default:
    32. break;
    33. }
    34. }
    Alles anzeigen
    * »Es ist sehr gut denkbar, daß
    * die Herrlichkeit des Lebens um jeden und immer in ihrer
    * ganzen Fülle bereit liegt, aber verhängt, in der Tiefe, unsichtbar,
    * sehr weit. Aber sie liegt dort, nicht feindselig, nicht widerwillig,
    * nicht taub. Ruft man sie mit dem richtigen Wort,
    * beim richtigen Namen, dann kommt sie. Das ist das Wesen
    * der Zauberei, die nicht schafft, sondern ruft.«
    *
    * Kafka
  • Also ich denke, ich hab den Fehler gefunden. Ich hab vergessen den Thread wieder zu wechseln, komischerweise hat er bis jetzt keinen Fehler geschmissen das ich versucht habe das UIKit im secondary Thread anzusprechen.
    * »Es ist sehr gut denkbar, daß
    * die Herrlichkeit des Lebens um jeden und immer in ihrer
    * ganzen Fülle bereit liegt, aber verhängt, in der Tiefe, unsichtbar,
    * sehr weit. Aber sie liegt dort, nicht feindselig, nicht widerwillig,
    * nicht taub. Ruft man sie mit dem richtigen Wort,
    * beim richtigen Namen, dann kommt sie. Das ist das Wesen
    * der Zauberei, die nicht schafft, sondern ruft.«
    *
    * Kafka