UISwitch in UiTable

  • UISwitch in UiTable

    Hi, hab mal wieder ne Frage.

    Ich habe mir eine Tabelle erstellt, mit eigenen Cellen. Nun habe ich die Cellen so aufgebaut, das sie zwei Labe und eine UISwitch haben. So weit funktioniert das auch alles super.

    Mit folgenden Code, kann ich den UISwitch die Farbe ändern.

    PHP-Quellcode

    1. UISwitch *auswahl = (UISwitch*) [cell viewWithTag:5];
    2. [auswahl setAlternateColors:YES];



    Jetzt weiß ich nicht, wie ich es schaffen kann, da es ja quasi autogenerierte UISwitch sind, wie ich sie auslesen kann. Ich brauche ja aus den verschiedenen UISwitch die Informationen EIN/AUS auslesen, damit ich damit arbeiten kann.

    Hoffe ihr könnt mir helfen.

    Gruß
    Cabaalo
  • Cabaalo schrieb:

    Hi, hab mal wieder ne Frage.

    Ich habe mir eine Tabelle erstellt, mit eigenen Cellen. Nun habe ich die Cellen so aufgebaut, das sie zwei Labe und eine UISwitch haben. So weit funktioniert das auch alles super.

    Mit folgenden Code, kann ich den UISwitch die Farbe ändern.

    PHP-Quellcode

    1. UISwitch *auswahl = (UISwitch*) [cell viewWithTag:5];
    2. [auswahl setAlternateColors:YES];
    3. NSLog (@"Zustand = %i", [auswahl isON]);


    Probier mal so !
  • Du erstellst eine Action-Methode, die Du mit dem Control-Event UIControlEventValueChanged des Switches verknüpfst:

    Quellcode

    1. [auswahl addTarget:self action:@selector(switchSwitched:forEvent:) forControlEvents:UIControlEventValueChanged];
    . In der Methode kannst Du über indexPathForRowAtPoint: den Indexpath ermitteln:

    Quellcode

    1. - (IBAction)switchSwitched:(id)inSender forEvent:(UIEvent *)inEvent {
    2. UITouch *theTouch = inEvent.allTouches.anyObject;
    3. CGPoint thePoint = [theTouch locationInView:self.tableView];
    4. NSIndexPath *theIndexPath = [self.tableView indexPathForRowAtPoint:thePoint];
    5. ...
    6. }
    „Meine Komplikation hatte eine Komplikation.“
  • Cabaalo schrieb:

    Hi, hab mal wieder ne Frage.

    Ich habe mir eine Tabelle erstellt, mit eigenen Cellen. Nun habe ich die Cellen so aufgebaut, das sie zwei Labe und eine UISwitch haben. So weit funktioniert das auch alles super.

    Mit folgenden Code, kann ich den UISwitch die Farbe ändern.

    PHP-Quellcode

    1. UISwitch *auswahl = (UISwitch*) [cell viewWithTag:5];
    2. [auswahl setAlternateColors:YES];



    Jetzt weiß ich nicht, wie ich es schaffen kann, da es ja quasi autogenerierte UISwitch sind, wie ich sie auslesen kann. Ich brauche ja aus den verschiedenen UISwitch die Informationen EIN/AUS auslesen, damit ich damit arbeiten kann.

    Hoffe ihr könnt mir helfen.

    Gruß
    Cabaalo


    Ist das schon gängige Praxis:

    Cabaalo schrieb:

    setAlternateColors

    Ich kann mich an diese Methode in der Doku nicht erinnern, was macht sie?
    I would be embarrassed if they did not spy on me.
  • macmoonshine schrieb:


    Du erstellst eine Action-Methode, die Du mit dem Control-Event UIControlEventValueChanged des Switches verknüpfst:

    [auswahl addTarget:self action:@selector(switchSwitched:forEvent:) forControlEvents:UIControlEventValueChanged];


    . In der Methode kannst Du über indexPathForRowAtPoint: den Indexpath ermitteln:




    Quellcode

    - (IBAction)switchSwitched:(id)inSender forEvent:(UIEvent *)inEvent {
    UITouch *theTouch = inEvent.allTouches.anyObject;
    CGPoint thePoint = [theTouch locationInView:self.tableView];
    NSIndexPath *theIndexPath = [self.tableView indexPathForRowAtPoint:thePoint];

    ...
    }

    macmoonshine schrieb:

    Habe ich soweit ausprobiert und funktioniert zwar, das ich wenn ich dann den Schalter umlege ich die Funktion aufrufe. In der Funktion kann ich dann auch einiges machen. Das Problem was ich aber noch habe ist, das er nicht unterscheidet in welcher Zeile ich das mache. Also egal in welcher Zeile ich ich den UISwitch aktiviere, es wird zwar die Funktion aufgerufen. Aber ich kann nicht auslesen welche Zeile es nun wirklich ist, bzw. welcher UISwitch es war.



  • Cabaalo schrieb:

    macmoonshine schrieb:

    Quellcode

    1. - (IBAction)switchSwitched:(id)inSender forEvent:(UIEvent *)inEvent {
    2. UITouch *theTouch = inEvent.allTouches.anyObject;
    3. CGPoint thePoint = [theTouch locationInView:self.tableView];
    4. NSIndexPath *theIndexPath = [self.tableView indexPathForRowAtPoint:thePoint];
    5. ...
    6. }
    Habe ich soweit ausprobiert und funktioniert zwar, das ich wenn ich dann den Schalter umlege ich die Funktion aufrufe. In der Funktion kann ich dann auch einiges machen. Das Problem was ich aber noch habe ist, das er nicht unterscheidet in welcher Zeile ich das mache. Also egal in welcher Zeile ich ich den UISwitch aktiviere, es wird zwar die Funktion aufgerufen. Aber ich kann nicht auslesen welche Zeile es nun wirklich ist, bzw. welcher UISwitch es war.
    Also die Zeile liefert dir doch [theIndexPath row]... und den UISwitch bekommst du über sender.
  • Die Actionmethode switchSwitched:forEvent: rufst Du niemals direkt auf. Das macht immer der Switch. Die Zellenposition steht in der Variablen theIndexPath. Wenn Du nur die Zeile und nicht den Abschnitt brauchst, bekommst Du mit theIndexPath.row die Zeilennummer.
    „Meine Komplikation hatte eine Komplikation.“
  • Das dachte ich mir auch, wenn ich den Switch aktiviere ruft er die Funktion auf. Das geht ja auch. Nur gibt er mir immer die gleiche Zeile an. Ich habe verschiedene Ausgaben mal probiert.

    PHP-Quellcode

    1. NSLog(@"theIndexPath %i",theIndexPath);
    2. NSLog(@"theIndexPath.row %i",theIndexPath.row);
    3. NSLog(@"inSender %i",inSender);
    4. NSLog(@"thePoint %i",thePoint);
    5. NSLog(@"theIndexPath.section %i",theIndexPath.section);



    Das Ergebnis ist aber immer das gleiche:

    PHP-Quellcode

    1. [Session started at 2011-05-14 19:39:49 +0200.]
    2. 2011-05-14 19:39:56.911 Test[29560:207] theIndexPath 103946224
    3. 2011-05-14 19:39:56.912 Test[29560:207] theIndexPath.row 0
    4. 2011-05-14 19:39:56.912 Test[29560:207] inSender 91752000
    5. 2011-05-14 19:39:56.912 Test[29560:207] thePoint 0
    6. 2011-05-14 19:39:56.913 Test[29560:207] theIndexPath.section 0
    7. 2011-05-14 19:39:56.913 Test[29560:207] -----------------------
    8. 2011-05-14 19:40:01.471 Test[29560:207] theIndexPath 103946224
    9. 2011-05-14 19:40:01.471 Test[29560:207] theIndexPath.row 0
    10. 2011-05-14 19:40:01.471 Test[29560:207] inSender 91755264
    11. 2011-05-14 19:40:01.472 Test[29560:207] thePoint 0
    12. 2011-05-14 19:40:01.472 Test[29560:207] theIndexPath.section 0
    13. 2011-05-14 19:40:01.472 Test[29560:207] -----------------------
    14. 2011-05-14 19:40:02.823 Test[29560:207] theIndexPath 103946224
    15. 2011-05-14 19:40:02.823 Test[29560:207] theIndexPath.row 0
    16. 2011-05-14 19:40:02.823 Test[29560:207] inSender 91759792
    17. 2011-05-14 19:40:02.824 Test[29560:207] thePoint 0
    18. 2011-05-14 19:40:02.824 Test[29560:207] theIndexPath.section 0
    19. 2011-05-14 19:40:02.824 Test[29560:207] -----------------------
    Alles anzeigen



    Irgendwas scheine ich falsch zu machen, weiß gerade nur leider nicht was.
  • Ph99Ph schrieb:

    longW schrieb:

    Ist das schon gängige Praxis:
    Zitat von »Cabaalo«
    setAlternateColors

    Ich kann mich an diese Methode in der Doku nicht erinnern, was macht sie?

    Ist ne private API. Ändert die Farbe des Sliders von Blau auf Orange (wie der Flugzeugmodus-Switch)

    Danke, so etwas hatte ich vermutet.
    Und -nur- orange?
    Hm.
    I would be embarrassed if they did not spy on me.
  • Ph99Ph schrieb:

    longW schrieb:

    Ist das schon gängige Praxis:
    Zitat von »Cabaalo«
    setAlternateColors

    Ich kann mich an diese Methode in der Doku nicht erinnern, was macht sie?

    Ist ne private API. Ändert die Farbe des Sliders von Blau auf Orange (wie der Flugzeugmodus-Switch)

    @Cabaalo: Das ist übrigens ein ideales Vorgehen, um die App im Store abgelehnt zu bekommen. Apple hat sich garantiert etwas dabei gedacht, dass nur dieser Schieber orange sein darf.
    „Meine Komplikation hatte eine Komplikation.“
  • Okay, gut zu wissen.


    Nochmal kurz zu meinem Problem, wenn ich

    PHP-Quellcode

    1. NSLog(@"theIndexPath %@",theIndexPath);
    2. NSLog(@"theIndexPath.row %i",theIndexPath.row);
    3. NSLog(@"inSender %@",inSender);
    4. NSLog(@"thePoint %@",thePoint);
    5. NSLog(@"theIndexPath.section %i",theIndexPath.section);



    verwende kommen zwar jetzt die richtigen Werte (war ich doof), allerdings immer noch die gleichen, in jeder Zeile.

    PHP-Quellcode

    1. 2011-05-14 21:05:45.726 Test[29822:207] theIndexPath 2 indexes [0, 0]
    2. 2011-05-14 21:05:45.726 Test[29822:207] theIndexPath.row 0
    3. 2011-05-14 21:05:45.727 Test[29822:207] inSender >
    4. 2011-05-14 21:05:45.727 Test[29822:207] thePoint (null)
    5. 2011-05-14 21:05:45.727 Test[29822:207] theIndexPath.section 0
    6. 2011-05-14 21:05:45.728 Test[29822:207] -----------------------
    7. 2011-05-14 21:05:48.188 Test[29822:207] theIndexPath 2 indexes [0, 0]
    8. 2011-05-14 21:05:48.189 Test[29822:207] theIndexPath.row 0
    9. 2011-05-14 21:05:48.189 Test[29822:207] inSender >
    10. 2011-05-14 21:05:48.189 Test[29822:207] thePoint (null)
    11. 2011-05-14 21:05:48.190 Test[29822:207] theIndexPath.section 0
    12. 2011-05-14 21:05:48.190 Test[29822:207] -----------------------
    Alles anzeigen


    Also kein Plan wieso, aber mein theIndexPath.row gibt immer die gleiche Zeile aus.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Cabaalo ()

  • inventura schrieb:

    Hallo,

    ich gehöre eigentlich nicht in das Forum. Ich möchte nur eine App für meine kürzlich gegründete Firma programmieren lassen. Nichts kompliziertes. Kann das einer machen? Oder wer kennt jemanden, der sowas macht. Bitte Info an mail@inventura.de

    Danke

    Kannst Du dafür bitte den Stellenmarkt benutzen und nicht einfach in irgendeinen Thread reinposten?

    Auch Danke
    „Meine Komplikation hatte eine Komplikation.“
  • inventura schrieb:

    Hallo,

    ich gehöre eigentlich nicht in das Forum. Ich möchte nur eine App für meine kürzlich gegründete Firma programmieren lassen. Nichts kompliziertes. Kann das einer machen? Oder wer kennt jemanden, der sowas macht. Bitte Info an mail@inventura.de

    Danke
    Könntest du bitte in die richtige Kategorie posten? Hier hat das gar nichts verloren. Ein paar mehr Details wie Preisvorstellung, Zeitrahmen usw. wären auch nicht schlecht. Aber wie gesagt, bitte an anderer Stelle.
  • Noch mal auf das Ursprüngliche Thema zurück. Wenn ich

    PHP-Quellcode

    1. NSLog(@"thePoint %@",NSStringFromCGPoint(thePoint));



    verwende. Gibt er mir in jedes mal immer 0 aus.

    Ich habe zwar denke ich inzwischen eine Möglichkeit gefunden, in dem ich meinem UISwitch beim erstellen jedem eine Tag-Nummer gebe und darüber das dann machen kann.
    Allerdings würde es mich einfach mal interessieren wieso das andere nicht so richtig funktioniert.

    Gruß
    Cabaalo