Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>Frage zu PickerView

Frage zu PickerView

MacThommes
MacThommes31.08.1012:37
Hallo, ich habe da mal eine Frage an die Versierten Programmierer unter uns.
Ich versuche im Moment mit Hilfe des Buches - iPhone und iPad, Programmierung für Einsteiger - die ersten Gehversuche unter XCode. Mein Wissen zu dieser Art von Programmieren hält sich schwer in Grenzen (habe bisher alles in Basic gemacht). Zu Amigazeiten hatte ich auch etwas in C gemacht. Aber ist schon lange her .
Also zu meinem Problem: Ich blicke nicht so ganz durch.
Ich möchte einen Picker View nutzen. Möchte diesen mit sagen wir mal fünf Rädern erstellen, auf denen jeweils zwei Räder das komplette ABC beinhalten sollen, die anderen sollen mit den Zahlen 0-9 angefüllt werden.
Im Buch werden Arrays kurz angesprochen. Wie ich diese Arrays anlege, und wie die Werte dan noch in das jeweilige Rad übernommen werden können, verstehe ich nicht.
Im Buch steht z.B. die Funktion:

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [NSString stringWithFormat:@"%i", row];
}

Der Autor macht das ganze scheinbar ohne irgend eine Schleife in dieser einen Funktion. Ich blicke da nicht durch. Im Buch steht auch nichts und im Internet habe ich auch nicht wirklich hilfreiches gefunden.
Mir würde jetzt weiterhelfen, wenn mir jemand erklären könnte (für Dummies) wie genau ich ein Array anlege (was ist zu beachten etc.) und wie kann ich ein Picker View mit Daten anfüllen, jedes Rad einzeln.
Ich hoffe ich nerve nicht.
Danke im Voraus!!

„Man hat´s nicht leicht, aber leicht hat´s einen....“
0

Kommentare

Duck Dodgers31.08.1012:55
Sorry, dass ich das so sage, aber bist du dir sicher, dass du da nicht ein größeres Problem hast? Wenn ich das lese, dann scheinst du noch Schwierigkeiten mit Obj-C zu haben und dann wird es dir hier schwer zu helfen! Was genau ist dein Problem? Arrays? Oder UIPickerView? Falls es so ist, dann empfehle ich dir erst mal Objtive-C zu lernen, um dann iPhone spezifische Geschichten anzufangen. Ansonsten musst du mal genau beschreiben, wo es hackt und vielleicht mal deinen Code posten.
0
MacThommes
MacThommes31.08.1013:36
Ich habe schon Programmiert. Aber man lernt ja gerne dazu.
Es nützt mir aber nichts, wenn ein Thema kurz angerissen wird. Dadurch entstehen nur noch mehr fragen.
Es geht mir darum, gewisse Dinge nicht nur (ab)zu tippen, sondern auch zu verstehen, warum manches so zu funktioniert und manches nicht.
Hier tue ich mich zugegeben schwer, was das PickerView betrifft.
Wie oben schon erwähnt arbeite ich gerade ein Buch durch. Viele Dinge davon verstehe ich, weil sie logisch sind. Aber es gibt dann doch noch die eine oder andere Frage.
Der Umgang mit Arrays ist (auch laut dem Buch) unter XCode ein anderer wie in anderen Programmiersprachen.
Auch hier vermisse ich eine etwas eingehendere Erklärung.
Ich möchte KEINE allgemeine Diskusion über das erlernen einer Programmiersprache anzetteln, sondern suche hier spezifische Hilfe zum oben angegebenen Problem.
Aber fang doch mal an:
Wie genau erstelle ich in XCode ein Array mit verschiedenen Werten?
Was muss ich dabei beachten (Deklaration von Variablen etc.)?
Wie übergebe ich verschiedene Werte in ein Pickerview (egal ob über ein Array oder manuell)?
Wie ist die oben angegebene Funktion zu erklären?
Normalerweise übergibt man mehrere Werte über eine Schleife, was da aber nicht der Fall ist. Das ist für mich unlogisch.
Danke schon mal für die vielen tausend Antworten!
„Man hat´s nicht leicht, aber leicht hat´s einen....“
0
Stefan S.
Stefan S.31.08.1013:42
zur ersten Frage ist dies evtl. hilfreich:
0
Duck Dodgers31.08.1014:30
@MacThommes:
NSArray ist aber eine Datentyp und meiner Ansicht eine grundlegende Komponente von Obj-C. Deshalb fragte ich dich, ob du nicht vorerst mal mit den Grundlagen anfängst und dann UIPicker, etc. Verstehe das nicht falsch, aber was bringt es dir UIPickerView zu erklären, wenn es viel weiter vorne hackt. Stefan hat dir ja schon einen Link geschickt. Ansonsten besorg dir doch mal ein gutes "Objective-C" Buch und mach das durch, dann wirst du dich mit dem Rest viel einfacher tun

Die Übergabe des UIPickerView funktioinert über die Protocol/Delegate-Methoden, wie z.B.
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
Auch hier solltest du wissen, was damit gemeint ist und wie man die einsetzt Siehe auch und

Mal abgesehen davon, haben wir das Buch nicht vor uns liegen und können dir dann auch nicht erklären, was der Autor in dem Buch gemacht hat. Also schwer dir seinen Code zu erklären!
0
MacThommes
MacThommes31.08.1015:48
Stefan S.
zur ersten Frage ist dies evtl. hilfreich:

Ja Stefan, das ist doch mal ein Hinweis, mit dem ich weiter komme. Danke!
Da werde ich mich jetzt erst mal mit auseinandersetzen.

Duck, wenn ich Dich richtig verstehe, dann wird das so gehändelt, wie in einer Struktur.
Gewisse Funktionen haben eine gewisse Struktur, die ich ansprechen kann. Ebenso werden auf diese Weise Werte übergeben oder geändert. Aber wie das in der oben angegebenen Funktion (oder was auch immer das ist) gemacht wird, verstehe ich trotzdem nicht.
Aber ich werde mir Deinen Rat zu Herzen nehmen und noch mal in die alten Bücher schauen. Auch Dir Danke!
„Man hat´s nicht leicht, aber leicht hat´s einen....“
0
Duck Dodgers31.08.1016:12
Wie gesagt, du tust dir nen Gefallen, wenn du die Grundlagen kannst. Da gibt es im Internet ne ganze Menge an Seiten wie cocoa-coding und die Developer Reference ist auch eine gute Hilfe. Wenn du nicht weiter kommst, dann melde dich ... am besten immer mit Code, dann läßt sich das besser erklären.
0
Stefan S.
Stefan S.31.08.1016:22
kennst Du BecomeAnXCoder ? von hier
0
Stefan S.
Stefan S.31.08.1016:51
und dort S.71
0
MacThommes
MacThommes31.08.1019:07
Stefan S.
und dort S.71

Hammer. Jungens ich liebe es!!
Das ist erst mal Stoff zum verarbeiten.

Ich werde mich aber bestimmt noch mal melden

Danke!
„Man hat´s nicht leicht, aber leicht hat´s einen....“
0
MacThommes
MacThommes06.10.1000:16
Tja, da bin ich noch mal.
Ich habe in der letzten Zeit so einiges an Büchersteiten verschlungen. Auch im Internet habe ich so einiges recherchiert. Ist ja ne Menge zum lesen da. Jedoch habe ich immer noch so meine Probleme.
Ich versuche im Moment eine Zeichenkette "ABCDE.....XYZ", quasi das ganze Alphabet in eine Zeichenkette (NSString) zu stecken um dieser Zeichenkette dann einzelne Buchstaben zu entlocken. Aber irgendwie hagelt es nur Fehlermeldungen. ich habe teilweise sogar komplette Beispielprogramme aus dem Internet versucht. Irgendwie raff ich es nicht.
Ebenfalls funktioniert das ganze auch mit dem NSArray nicht.
z.B.:

NSArray *myArray;
myArray = [NSArray arrayWithObjects:@"Alpha",@"Beta",@"Gamma",nil];

Das schmeisst mir schon die Fehlermeldung raus:
Conflicting types for ´myArray´
Initializer element is not constant

Irgendwie drehe ich mich im Kreis und komme nicht weiter....
Naja... vielleicht hat ja jemand eine Idee...
„Man hat´s nicht leicht, aber leicht hat´s einen....“
0
syntxerr27.10.1002:38
Ja, diese C Grundlagen ist sicherlich anfangs ein wenig schwierig nachzuvollziehen, da hier einiges durch die Verwendung von NSArray verschleiert wird.

Anhand der zurückgegebenen Fehler nehme ich an, dass du obige Zeilen einfach "irgendwo" in den Code geschrieben hast.

Hier eine kurze Erklärung...

Array Deklarationen sind Konstanten. Die Position eines Arrays im Speicher ist unveränderlich. Ein Pointer dagegen ist nicht unveränderlich, da er während des Lebenszyklus deines Programms auf unterschiedliche Speicheradressen zeigen kann. Da es ihm niemand anders gesagt hat, ist die Konsequenz daraus, dass der Compiler an dieser Stelle Code "einsetzt" um den momentanen Wert des Pointers zu ermitteln. Damit das funktioniert muss das ganze allerdings auch innerhalb einer Methode passieren und darf nicht irgendwo "herumschweben".

Wenn du also die zwei Zeilen in eine deiner Methoden einbaust (idealerweise bevor darauf zugegriffen wird ), wird der Fehler verschwinden. Je nachdem wie dein Programm ausschaut ist es vielleicht auch eine Überlegung wert die Variable direkt zur Instanzvariable zu machen.

Hoffe das hilft dir weiter.
0
MacThommes
MacThommes10.02.1110:31
Ja, ich werde das mal versuchen. Aber ich habe den Verdacht, das XCode einige Fehler hat. Es gibt so ein paar Dinge, die ich nicht wirklich nachvollziehen kann:
Ich habe an einer Stelle des Programms ein paar Zeilen, die mit eine kleine Grafik in einen UIImageView (hier heisst das UIImageView feldEinsImage) laden. Das ganze funktioniert super.
            
UIImage *img3 =[UIImage imageNamed:@"gruenKlecks.png"];
[feldEinsImage setImage:img3];
[feldEinsImage setHidden:NO];
Wegen eines seltsamen Fehlers (Inhalte einer Variablen ändern in einer Schleiffe ihren Wert, obwohl in der Schleiffe und auch danach NICHT mehr auf diese Variable zugegriffen wird), habe ich mit einen Text zur Kontrolle via NSLog ausgeben lassen:
NSLog(@"Feld 1 ROT %i",gewuerfelt);
Jetzt bin ich hingegangen und habe diese Zeile gelöscht. Sollte ja eigentlich KEINEN Einfluss auf den Rest des Programms haben. Aber jetzt bekomme ich die Meldung:
error: expected expression before 'UIImage'
in der Zeile:
UIImage *img3 =[UIImage imageNamed:@"gruenKlecks.png"];
In der Zeile darunter folgende Fehlermeldung:
error: 'img1' undeclared (first use in this function)
Es muss doch möglich sein, ohne diesen NSLog das Programm zum laufen zu bringen?
Ich bin so ziemlich Ratlos und der Frust hindert mich daran, weiter zu kommen.
Ich hoffe es jemand einen Rat diesbezüglich.
Sollte ich evtl. einen blöden Fehler gemacht haben, dann bitte "Schonend" beibringen...
Hier noch mal zwei Screenshots. Erster ohne und der Zweite mit Fehlermeldung:







„Man hat´s nicht leicht, aber leicht hat´s einen....“
0
MacThommes
MacThommes10.02.1110:39
Sorry, konnte das Bild eben nicht hinzufügen, aber hier ist es jetzt:

„Man hat´s nicht leicht, aber leicht hat´s einen....“
0
MacThommes
MacThommes10.02.1110:40
...und hier ohne die Fellermeldung:
„Man hat´s nicht leicht, aber leicht hat´s einen....“
0
Marcel Bresink10.02.1116:37
Aber ich habe den Verdacht, das XCode einige Fehler hat.

Sorry, aber bei den geringen Kenntnissen, die hier zutage treten, solltest Du den Fehler erst einmal bei Dir suchen.

Der Fehler muss oberhalb von NSLog liegen. Kannst Du die ganze Schleife posten?
0
MacThommes
MacThommes10.02.1117:18
Das was Du da siehst ist der Inhalt einer Funktion. Diese Funktion wird innerhalb einer Schleife aufgerufen. Hier die Funktion:
-(IBAction) feldZweiZeichnen { // Das zweite Auswahlfeld beklecksen....
    NSLog(@"War wohl an...");
    switch (gewuerfelt) { // Welche Zahl wurde gewürfelt?
        case 1: // eine EINS ..... Gibt ROT
            NSLog(@"Feld 2 ROT %i",gewuerfelt);
            UIImage *img1 =[UIImage imageNamed:@"rotKlecks.png"];
            [feldZweiImage setImage:img1];
            [feldZweiImage setHidden:NO];
            break;
        case 2: // eine ZWEI ..... Gibt GELB
            NSLog(@"Feld 2 GELB %i",gewuerfelt);
            UIImage *img2 =[UIImage imageNamed:@"gelbKlecks.png"];
            [feldZweiImage setImage:img2];
            [feldZweiImage setHidden:NO];
            break;
        case 3: // eine DREI ..... Gibt GRUEN
            NSLog(@"Feld 2 GRUEN %i",gewuerfelt);
            UIImage *img3 =[UIImage imageNamed:@"gruenKlecks.png"];
            [feldZweiImage setImage:img3];
            [feldZweiImage setHidden:NO];
            break;
        case 4: // eine VIER ..... Gibt BLAU
            NSLog(@"Feld 2 BLAU %i",gewuerfelt);
            UIImage *img4 =[UIImage imageNamed:@"blauKlecks.png"];
            [feldZweiImage setImage:img4];
            [feldZweiImage setHidden:NO];
            break;
        case 5: // eine FUENF ..... Gibt GRAU
            NSLog(@"Feld 2 GRAU %i",gewuerfelt);
            UIImage *img5 =[UIImage imageNamed:@"grauKlecks.png"];
            [feldZweiImage setImage:img5];
            [feldZweiImage setHidden:NO];
            break;
            // sonst mache nichts...
        default:
            break;
    }
}
die Variable "gewuerfelt" ist global deklariert, und beinhaltet eine Zahl von 1 bis 5.
Also wird in dieser Funktion lediglich überprüft, welche Zahl in der Variablen "gewuerfelt" ist und dann die entsprechende Grafik im UIImageView dargestellt. Seltsamerweise hat das gestern noch alles bestens funktioniert. Dann hatte ich das Problem mit der anderen Variablen und habe mir den Inhalt dieser Variablen über NSLog ausgeben lassen.
Jetzt wollte ich die Zeile mit dem NSLog rausnehmen und bekomme diese Fehlermeldungen...
Aber wenn Dich der Umstand stört, das es Menschen gibt, die weniger Kenntnis haben wie Du sie zu haben scheinst, überlese diese Postings einfach...
Trotzdem Danke...
„Man hat´s nicht leicht, aber leicht hat´s einen....“
0
atello7710.02.1117:29
Hi,

kurz zum ursprünglichen Problem:


- (NSString*) pickerView:(UIPickerView *) pickerView titleForRow:(NSInteger) row forComponent:(NSInteger) component {
    
    switch (component) {
        case 0: case 1:
            return [NSString stringWithFormat:@"%C", 'A' + row%26];
        case 2: case 3: case 4:
            return [NSString stringWithFormat:@"%d", row%10];
        default:
            return @"-";
    }
}

- (NSInteger) numberOfComponentsInPickerView:(UIPickerView *) pickerView {
    
    return 5;
}

- (NSInteger) pickerView:(UIPickerView *) pickerView numberOfRowsInComponent:(NSInteger)component{
    
    switch (component) {
        case 0: case 1:
            return 26;
        case 2: case 3: case 4:
            return 10;
        default:
            return 0;
    }
}
0
Marcel Bresink10.02.1118:43
Der Fehler liegt darin, dass ein case-Statement nicht mit einer Variablendeklaration beginnen darf. Die korrekte Schreibweise wäre in diesem speziellen Fall mit geschweiften Klammern:

case: {
   UIImage *img3 =[UIImage imageNamed:@"gruenKlecks.png"];
   [feldEinsImage setImage:img3];
   [feldEinsImage setHidden:NO];
   break;
}

Generell ist es schlechter Stil, Variablen einfach "irgendwo" zu deklarieren. In neueren C-Versionen ist das zwar zulässig, aber normalerweise deklariert man Variablen nur am Anfang eines Blocks, d.h. nach der öffnenden geschweiften Klammer. Die Variablen gelten nämlich ab da, selbst wenn in modernem C die Deklaration auch weiter unten stehen dürfte.

Die ganze Sache ist übrigens unnötig kompliziert. Die folgende Funktion ist übersichtlicher und tut genau das gleiche:

-(IBAction) feldZweiZeichnen { // Das zweite Auswahlfeld beklecksen....
    NSString    *farbe;
    
    NSLog(@"War wohl an...");
    switch (gewuerfelt) {
    case 1:
        name = @"rot";
        break;
    case 2:
        name = @"gelb";
        break;
    case 3:
        name = @"gruen";
        break;
    case 4:
        name = @"blau";
        break;
    case 5:
        name = @"grau";
        break;
    default:
        return;
    }
    NSLog(@"Feld 2 %@ %i", [farbe uppercaseString], gewuerfelt);
    [feldZweiImage setImage: [NSImage imageNamed: [NSString stringWithFormat: @"%@Klecks.png", farbe]]];
    [feldZweiImage setHidden:NO];
}
0
MacThommes
MacThommes10.02.1118:45
Hi atello77

DAS ist lesbar. Jetzt verstehe ich auch in etwa, wie das funktioniert, was der da im Buch zusammengeschrieben hat...
Auch wenn das so, wie Du das jetzt geschrieben hast, für viele zu umständlich ist, für mich sieht das wesentlich sinnvoller aus, wie in eine Zeile gepackt.
Ich danke Dir. Du hast mich echt ´ne ganze Ecke weiter gebracht!!
„Man hat´s nicht leicht, aber leicht hat´s einen....“
0
MacThommes
MacThommes10.02.1119:22
Marcel Bresink:
Ok, ok... Du hast mich KALT erwischt!!

Heute habe ich wieder was gelernt!!
...dass ein case-Statement nicht mit einer Variablendeklaration beginnen darf
... wusste ich nicht. Ich dachte das geht.
Aber ich habe auch was gefunden (konnte ich mir jetzt nicht verkneifen!)
name muss ebenfalls deklariert werden und Du hast geschrieben:
[feldZweiImage setImage: [NSImage imageNamed: [NSString stringWithFormat: @"%@Klecks.png", farbe]]];
da muss aber ein UIImage rein, wo NSImage steht...
Nein, aber im Ernst: Das hat mir jetzt echt weiter geholfen. Vor allem den kurzen Weg, den Du im zweiten Listing angegeben hast...
Mann ich habe es mir wieder schwer gemacht.
Da sieht man wieder den Profi...
Meine Programmierkenntnisse sind extrem eingestaubt muss ich zugeben.
Intensiv habe ich zu Amigazeiten mit dem Dice programmiert.
Aber ich lerne...
DANKE!!
„Man hat´s nicht leicht, aber leicht hat´s einen....“
0
Marcel Bresink10.02.1119:45
name muss ebenfalls deklariert werden

Nein, aber es stimmt tatsächlich was nicht: In dem schnell eingetippten Programmstück muss es bei den cases immer "farbe =" statt "name =" heißen. Ja, und in iOS heißen dies NSImages eigentlich UIImages ...
0
MacThommes
MacThommes10.02.1119:54
Hab ich auch gerade gesehen...
Naja.. Halt ein paar graue Haare mehr. Aber wenn ich das so drauf hätte, das ich einen Code so aus dem Handgelenk schreiben könnte...
„Man hat´s nicht leicht, aber leicht hat´s einen....“
0
MacMark
MacMark10.02.1121:09
Siehe auch . Unten ist dann auch ein Beispiel-Projekt verlinkt, das ihn benutzt.
„@macmark_de“
0
MacThommes
MacThommes17.02.1123:11
.. noch ein Problem.
Ich habe mehrere Buttons auf meinem View (sagen wir mal 20). Wenn einer der Buttons angeklickt wurde, möchte ich diesen Button in einer Funktion auswerten.
Am liebsten würde ich das über "switch" machen. Aber wie zum Teufel komme ich jetzt an die ID (im Interface Builder hat der Button z.B. eine 356)?
In der Referenz und im Internet habe ich dazu nichts finden können.
Es muss doch möglich sein, einen Event abfragen zu können?
Ich hoffe das jemand einen Tipp hat...
Danke schon mal im Voraus...
„Man hat´s nicht leicht, aber leicht hat´s einen....“
0
Mr. Krabs
Mr. Krabs17.02.1123:43
MacThommes:
Dann hast du aber nicht richtig gesucht
„Deux Strudel!“
0
MacThommes
MacThommes18.02.1108:30
Mr. Krabs
@@MacThommes:
Dann hast du aber nicht richtig gesucht

Doch, den hatte ich schon gesehen. Aber das Problem ist, das hier nur der Text, welcher im Button steht genutzt wird.
Wenn ich jedoch keinen Text drinne habe, bekomme ich ein (NULL) zurück.
Aber ich habe mir schon überlegt, einfach jeden Button einen Text zu geben, und den dann - über die Schriftfarbe - unsichtbar zu machen.
Dann kann ich natürlich so auch weitermachen.
Das Problem ist halt nur, das die Buttons keinen Text haben sollen...
Trotzdem danke!!
„Man hat´s nicht leicht, aber leicht hat´s einen....“
0
Marcel Bresink18.02.1108:57
Aber das Problem ist, das hier nur der Text, welcher im Button steht genutzt wird.

Nein, das stimmt nicht. Was auf der zitierten Webseite steht, ist irreführend.

Die Lösung für Dein Problem ist: Du definierst für jeden Deiner Buttons im Interface Builder einen "Tag", also eine Kennzahl, die Du selber vorgeben kannst. Diese Tags lassen sich dann in der Action-Methode der Buttons einfach abfragen, also etwa so:

- (IBAction) clickButton:(id) sender
{
    switch ([sender tag]) {
        case 1: ...
    }
}
0
MacThommes
MacThommes18.02.1114:35
Ja, Marcel. Das ist es!!
Danke. Manchmal sieht man den Wald vor lauter Bäumen nicht...
„Man hat´s nicht leicht, aber leicht hat´s einen....“
0
Mr. Krabs
Mr. Krabs18.02.1121:28
MacThommes:
Oder du hast die Buttons ohnehin in der Header-Datei als Outlets definiert und vergleichst einfach die Pointer... Würde ich dem Tag-Verfahren vorziehen.
„Deux Strudel!“
0
MacMark
MacMark18.02.1121:44
Marcel Bresink
Wobei Apple laut Erica Sadun gerne Tags bis 10 benutzt. Man selbst also besser danach startet mit seiner Tag-Numerierung.
„@macmark_de“
0
ExMacRabbitPro18.02.1121:54
MacMark
@@Marcel Bresink
Wobei Apple laut Erica Sadun gerne Tags bis 10 benutzt. Man selbst also besser danach startet mit seiner Tag-Numerierung.

Wie sollen sich Tag Nummern in einem eigenen Programm mit denen Apples in die Quere kommen?
0
MacMark
MacMark18.02.1122:30
ExMacRabbitPro
Weil Dein Programm Code von Apple nutzt.

Komische Frage übrigens, wenn man sich Deinen Beruf und Deine Hobbies im Profil anschaut.
„@macmark_de“
0
ExMacRabbitPro19.02.1114:34
MacMark
@@ExMacRabbitPro
Weil Dein Programm Code von Apple nutzt.

Komische Frage übrigens, wenn man sich Deinen Beruf und Deine Hobbies im Profil anschaut.

Nun - mein UIButton, mein UIViewController, meine IBAction, meine Tag Nummer. Da kollidiert nix mit Apple - wie auch? Meine Buttons sind Cocoa ja vollkommen unbekannt. Es gibt kein dokumentiertes Cocoa (-Touch) API das darauf hinweist, dass ein eigener UIView (dieser bringt übrigens das Tag Property mit, alle Controls erben davon) eine bestimmte Tag-Nummer nicht haben darf.

tag
An integer that you can use to identify view objects in your application.

@property(nonatomic) NSInteger tag
Discussion
The default value is 0. You can set the value of this tag and use that value to identify the view later.

Availability
Available in iOS 2.0 and later.
0
MacMark
MacMark21.02.1112:38
ExMacRabbitPro
Jede Cocoa (Touch)-GUI ist ja eine Hierachie von Views. Wenn Du nun beispielsweise
- (UIView *)viewWithTag:(NSInteger)tag
verwendest, um einen bestimmten View zu finden, sagen wir mit
[window viewWithTag:5]
, dann wird Dir der erste View aus der Hierachie geliefert, der die passende Tagnummer (hier: 5) hat.
Apple selbst verwendet selten Tags, aber es gibt vereinzelte Fälle. In diesen wurden die Tags 1, 2 und so weiter verwendet. In so einem Fall würde Dein View nur gefunden, wenn er auf höherer Ebene als Apples View sitzt, ansonsten wird Dir Apples View geliefert.
„@macmark_de“
0
ExMacRabbitPro21.02.1113:04
MacMark
@@ExMacRabbitPro
Jede Cocoa (Touch)-GUI ist ja eine Hierachie von Views. Wenn Du nun beispielsweise
- (UIView *)viewWithTag:(NSInteger)tag
verwendest, um einen bestimmten View zu finden, sagen wir mit
[window viewWithTag:5]
, dann wird Dir der erste View aus der Hierachie geliefert, der die passende Tagnummer (hier: 5) hat.
Apple selbst verwendet selten Tags, aber es gibt vereinzelte Fälle. In diesen wurden die Tags 1, 2 und so weiter verwendet. In so einem Fall würde Dein View nur gefunden, wenn er auf höherer Ebene als Apples View sitzt, ansonsten wird Dir Apples View geliefert.

Ja, das stimmt.

Aber nochmal: Wie soll dieser Effekt bei einer GUI die ich selbst gemacht habe - sprich: Alle Views und Subviews wurden von meiner App bzw. meinen Xib Files erzeugt - und die nicht von Apple stammen, zum tragen kommen?

Antwort: Gar nicht. Es kann einfach nicht sein, denn die standard GUI-Elemente haben keine vorbelegten Tag Nummern.
Und im übrigen: Dein Ansatz lässt darauf schließen, dass Du "fertige" Dialoge die iOS mitliefert (wie z.B. UIAlerts oder irgendwelche Image Picker) durch hinzufügen eigener Views modifizieren möchtest. Denn nur DORT könnte es vorkommen, dass Tag Nummern deiner eigenen Views mit den bereits vergebenen von Apple kollidieren.
Und dazu ganz im Ernst: Ein Entwickler, der daran interessiert ist dass seine Programme über längere Zeit (sprich: über iOS Releases hinweg) fehlerfrei funktionieren, sollte von so einem Vorhaben abstand nehmen.
Aber das ist nur meine Meinung....
0
ExMacRabbitPro21.02.1115:54
MacMark
@@ExMacRabbitPro
Jede Cocoa (Touch)-GUI ist ja eine Hierachie von Views. Wenn Du nun beispielsweise
- (UIView *)viewWithTag:(NSInteger)tag
verwendest, um einen bestimmten View zu finden, sagen wir mit
[window viewWithTag:5]
, dann wird Dir der erste View aus der Hierachie geliefert, der die passende Tagnummer (hier: 5) hat.
Apple selbst verwendet selten Tags, aber es gibt vereinzelte Fälle. In diesen wurden die Tags 1, 2 und so weiter verwendet. In so einem Fall würde Dein View nur gefunden, wenn er auf höherer Ebene als Apples View sitzt, ansonsten wird Dir Apples View geliefert.

Stimmt das könnte passieren.
Bisher konnte ich so etwas umgehen da ich mir lieber direkt Referenzen (oder Outlets) auf Views halte, die ich nach dem Hinzufügen zur View Hierarchie noch einmal erreichen will. Hinterher über das Tag zu suchen käme mir da eher nicht in den Sinn - das entspricht nicht meinem Programmierstil.
Ich nutze das Tag, wenn überhaupt, nur zur Identifikation des Senders in meinen IBActions - wie es ja auch oben angeregt wurde.
0
ExMacRabbitPro21.02.1115:56
Nanu - dieser Thread ist scheinbar auch defekt. Hier erscheinen Posts die ich so nicht final eingestellt habe - sondern eigentlich von mir gelöscht bzw. bearbeitet wurden. MacMark: Daher ignoriere bitte mein Post von 21.02.11 13:04.

Mir scheint die Forumsdatenbank "fault" gerade auseinander....
0
ExMacRabbitPro21.02.1115:57
Ping... (nur damit meine Posts sichtbar werden...)
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.