UIButton name erstellen?

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

  • UIButton name erstellen?

    Hallo,

    Ich habe hier mehrere Views mit jeweils vielen Buttons, jeder Button hat eine ID.

    Ich hab mir eine kleine Funktion geschrieben die zählt welcher Button wie oft gedrückt wurde.

    Jetzt möchte ich eine neue View in der die am häufigsten benutzen Buttons angezeigt werden.
    Meine Frage ist jetzt wie kann ich die ID zu einem Button machen?

    Alle Buttons heißen button1,button2,button3, usw.

    Also z.b. ID=2

    --> self.button2

    button2 ist schon vorhanden und soll nur noch auf der "meist genutzt" Seite zusätzlich angezeigt werden.

    Ich könnte jetzt ein riesiges switch case bauen oder ganz viele if schleifen, aber das ist ja nicht Sinn der Sache...

    MfG

    Crankerer
  • Auch ein Button ist ein View; also haben Buttons auch Tags. ;)

    Wenn Du unbedingt eine Zeichenkette verwenden willst, kannst Du
    • Das Tag als Index in einem Array mit Strings verwenden, oder
    • Den Titel des Buttons auslesen, oder
    • Eine Unterklasse von UIButton mit einer Property für den String schreiben, und dieser Property über User Defined Runtime Attributes um Identitätsinspektor jeweils einen Wert zuweisen.
    Ich würde nach wie vor Tags (ohne Strings) verwenden. :D
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    Auch ein Button ist ein View; also haben Buttons auch Tags. ;)

    Wenn Du unbedingt eine Zeichenkette verwenden willst, kannst Du
    • Das Tag als Index in einem Array mit Strings verwenden, oder
    • Den Titel des Buttons auslesen, oder
    • Eine Unterklasse von UIButton mit einer Property für den String schreiben, und dieser Property über User Defined Runtime Attributes um Identitätsinspektor jeweils einen Wert zuweisen.
    Ich würde nach wie vor Tags (ohne Strings) verwenden. :D


    oder eben valueForKey weil neuerdings die IB-elemente als properties definiert werden (obwohl ich nicht verstanden habe warum jemand außerhalb meiner klasse auf diese zugriff haben sollte).
  • macmoonshine schrieb:

    Auch ein Button ist ein View; also haben Buttons auch Tags. ;)

    Wenn Du unbedingt eine Zeichenkette verwenden willst, kannst Du
    • Das Tag als Index in einem Array mit Strings verwenden, oder
    • Den Titel des Buttons auslesen, oder
    • Eine Unterklasse von UIButton mit einer Property für den String schreiben, und dieser Property über User Defined Runtime Attributes um Identitätsinspektor jeweils einen Wert zuweisen.
    Ich würde nach wie vor Tags (ohne Strings) verwenden. :D


    Ich glaube du hast mich falsch verstanden, ich benutze ja bereits die Tags um meine Buttons zu identifizieren.

    Button wird erstellt und ein Tag zugewiesen:

    Quellcode

    1. self.button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    2. [self.button1 setFrame:CGRectMake(5, 2, 50, 50)];
    3. [self.button1 setTag: 1];
    4. [self.button1 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"%ld.png",(long)self.face1.tag]] forState:UIControlStateNormal];
    5. [self.button1 addTarget:self action:@selector(copyImage:) forControlEvents:UIControlEventTouchUpInside];
    6. [self->ScrollView addSubview:self.button1];
    Alles anzeigen


    Aktion des Buttons:

    Quellcode

    1. - (void) copyImage:(UIButton*)button {
    2. NSInteger *imageID = button.tag;
    3. pasteboard = [UIPasteboard generalPasteboard];
    4. pasteboard.image = [UIImage imageNamed:[NSString stringWithFormat:@"%ld.png",(long)imageID]];
    5. NSLog(@"Bild kopiert! ImageID: %ld",(long)imageID);
    6. [self DataSaveRead:imageID];
    7. }
    Alles anzeigen


    feststellen wie oft der Button schon gedrückt wurde und um 1 erhören:

    Quellcode

    1. -(void)DataSaveRead:(NSInteger*)ID
    2. {
    3. NSLog(@"%ld",(long)ID);
    4. NSInteger mengeINT = 0;
    5. NSString *menge = [DataSave stringForKey:[NSString stringWithFormat:@"%ld",(long)ID]];
    6. NSLog(@"%@",menge);
    7. if (menge == NULL) {
    8. mengeINT = [menge intValue];
    9. mengeINT = 1;
    10. } else {
    11. mengeINT = [menge intValue];
    12. mengeINT++;
    13. }
    14. NSLog(@"%li",(long)mengeINT);
    15. if (mengeINT > 100) {
    16. mengeINT = 100;
    17. }
    18. menge = [NSString stringWithFormat:@"%ld",(long)mengeINT];
    19. [DataSave setObject:[NSString stringWithFormat:@"%@",menge] forKey:[NSString stringWithFormat:@"%ld",(long)ID]];
    20. NSLog(@"%@",menge);
    21. }
    Alles anzeigen


    Jetzt brauche ich etwas was ungefähr so aussieht:

    Quellcode

    1. for(int i,i<100,i++) {
    2. NSString *menge = [DataSave stringForKey:[NSString stringWithFormat:@"%ld",(long)ID]];
    3. if([menge intValue] == "größter Wert") {
    4. ... // ID zu self.ButtonID
    5. [self->ScrollView2 addSubview:self.ButtonID];
    6. }
    7. }
    Alles anzeigen


    hoffentlich ist es so besser verständlich was ich möchte. Tut mir leid für die ungenaue Beschreibung.
  • Was spricht dagegen, alle Buttons in einem Array zu halten? Dann kannst Du beim Ermitteln der am häufigsten benutzen und deren Anzeigen direkt auf das jeweilige Element zugreifen. Das erspart Dir den Kunstgriff, aus einem Tag wieder den Button identifizieren zu wollen.

    Vielleicht magst Du auch eine eigene Button-Klasse verwenden, die direkt einen Zähler beinhaltet, welcher beim Drücken erhöht wird ... Oder das besagte Array enthält Dictionaries, die jeweils einen Button und seinen Zähler beinhalten ... Oder oder oder :D

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • macmoonshine schrieb:

    Dafür kannst Du KVC verwenden, wie es gritsch vorgeschlagen hat:

    Quellcode

    1. NSString *theKey = [NSString stringWithFormat:@"button%d", theID];
    2. UIButton *theButton = [self valueForKey:theKey];
    3. [self->ScrollView2 addSubview:theButton];


    genau das hab ich gesucht, DANKE!

    sry gritsch, mir war erst nicht klar was da damit meintest, jetzt mit dem Beispiel läufst.