DetailViewController mit Image und Label wie im Adressbuch

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

  • DetailViewController mit Image und Label wie im Adressbuch

    Hallo,

    ich würde in meinem DetailViewController gerne ein Image und ein Label
    wie im Adressbuch (Kontakte) darstellen. Ich hatte schon überlegt eine angpasste
    Zelle für meine Tabelle zu erstellen. Da ist aber mein Problem, dass
    ich, wenn ich den Datensatz editieren möchte, ja unterscheiden muss,
    was ich editieren möchte. Bisher unterscheide ich das im

    Quellcode

    1. didSelectRowAtIndexPath
    je
    nachdem, auf welche Zelle ich geklickt habe. (Das Beispiel habe ich aus diesem Tutorial: iphonesdkarticles.com/2008/11/…torial-updating-data.html)
    Kann man in dieser Methode abfangen, welches Feld (Control) aus der Zelle
    verwendet werden soll?
    Habt ihr evtl. eine andere Idee?

    Viele Grüße
    Jens
    Viele Grüße
    Jens

    -----------------------
  • Hallo nochmal,

    ich bin immer noch auf der Suche, wie der "Header" (Bild und Name) in der Adressbuch-App aufgebaut ist.

    Ich möchte in meinem DetailViewController ebenfalls ein Bild darstellen. Ich bin mir nur etwas unschlüssig, wie ich das am Besten mache.

    Momentan habe ich das Bild in einer Zelle meiner gruppierten Tabelle. Ist zwar nett, aber die Zelle ist natürlich viel zu breit, was wiederum unschön aussieht.

    Ich könnte das Bild auch außerhalb meiner Tabelle darstellen, da wäre aber die Frage, wie kann ich abfangen, ob ich mich gerade im "Edit-Modus" befinde. Wahrscheinlich nur über eine Variable, die ich beim Klick auf "Bearbeiten" setze, oder? Ich möchte dann, wenn ich den Datensatz bearbeite auch das Bild ändern können.

    Habt ihr evtl. noch eine Idee?

    Viele Grüße
    Jens
    Viele Grüße
    Jens

    -----------------------
  • Also spontan würde ich sagen, es ist nicht immer alles so wie es aussieht.

    Mach doch einen View, den du dann in viewForHeaderAtSection (oder so ähnlich)
    quasi bei section=0 (also als erstes) übergibst und in allen anderen sections eben nil!

    Dieser View hat dann ein ImageView und ein weiteren unsichtbaren View mit Label.

    Bei beiden Views kannst du dann mit touchesBegan usw. Touches abfragen und jeweilige Aktionen starten. Das könnte dann ein pushView auf den aktuellen NavController sein. Somit würde wie bei anderen Zeilen der TableView animiert ein EditorView "einfliegen", in welchem du dann das Bild oder den Text für das label ändern lassen kannst ....

    Müsste gehen wenn ich mich nicht irre. Das Einzige, wo man aufpassen muss ist die Tatsache, ob die Touches auch bei den Views ankommen, weil TableViews dabei etwas schwieriger zu managen sind. Aber da föllt mir ein, Du könntest auch völlig unabhängig vom tableView oben drüber einen View mit all dem Zeugs (inklusive Touches) machen und den tableView weiter unten beginnen lassen, fertig ... dann kommen die Touches ganz sicher am richtigen Empfänger an ...
    Um Rekursion zu verstehen, muss man erst Rekursion verstehen!
  • Hallo,

    das hört sich schon mal gut an.
    Ich glaube, ich werde den Weg mit der View außerhalb der Tabelle mal probieren.

    Meine Controller haben bisher immer nur eine View (UITableView). Gibt es Punkte, auf die ich achten sollte, wenn ich eine zweite View aufnehme? Ich möchte im Vorfeld schon mögliche Fehlerquellen beachten, damit ich diese umgehend kann, bzw. Fehler von Anfang vermeiden kann.

    Viele Grüße
    Jens
    Viele Grüße
    Jens

    -----------------------
  • Also letztlich musst du nur auf die Positionierung achten. Am einfachsten mit einem Haupt-ViewController, darauf den ImgaeView, den View mit dem Label und letztlich den TableView.
    Im Code machst du das mit den CGRect-Angaben, also Ausrichtung in X, Y, Width und Height. Im IB legst du die einfach so wie du die haben willst. Den TableView dann einfach passend unter die anderen positionieren, fertig!

    Klar sollte dir nun sein, dass du einen Haupt-ViewController hast und weitere Views mit jeweiligen Classes, in welchen du die entsprechenden Codes zum Editieren usw. packst ...
    Um Rekursion zu verstehen, muss man erst Rekursion verstehen!
  • Hallo,

    ich habe meinen DetailViewController ein wenig umgebaut, und habe jetzt oben einen View mit einem UIImageView und einem UITableView.
    Unter diesem View habe meinen UITableView für meine Details.

    Ich habe die Oberfläche per Interface Builder gestaltet und im interface habe ich drei Outlets:

    Quellcode

    1. IBOutlet UITableView *nameTableView;
    2. IBOutlet UITableView *detailTableView;
    3. IBOutlet UIImageView *imageView;


    Jetzt möchte ich den Klick / Touch auf meinen imageView abfangen, um ein UIActionSheet aufzurufen.
    Allerdings wird, soweit ich das erkennen kann, kein event ausgelöst. Zumindest erhalte ich keine Ausgabe, wenn ich folgendes teste:

    Quellcode

    1. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    2. NSLog(@"Began");
    3. NSSet *allTouches = [event allTouches];
    4. switch ([allTouches count]) {
    5. case 1: { //Single touch
    6. //Get the first touch.
    7. UITouch *touch = [[allTouches allObjects] objectAtIndex:0];
    8. switch ([touch tapCount])
    9. {
    10. case 1: //Single Tap.
    11. {
    12. [self dialogOtherAction];
    13. } break;
    14. }
    15. } break;
    16. default:
    17. break;
    18. }
    19. }
    20. - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    21. NSLog(@"End");
    22. //Get all the touches.
    23. NSSet *allTouches = [event allTouches];
    24. //Number of touches on the screen
    25. switch ([allTouches count])
    26. {
    27. case 1:
    28. {
    29. //Get the first touch.
    30. UITouch *touch = [[allTouches allObjects] objectAtIndex:0];
    31. switch([touch tapCount])
    32. {
    33. case 1://Single tap
    34. [self dialogOtherAction];
    35. break;
    36. }
    37. }
    38. break;
    39. }
    40. }
    Alles anzeigen


    Ich habe den Code bei meiner Suche im Internet gefunden.
    Die NSLog()-Ausgabe erscheint nicht und auch mein ActionSheet wird nicht angezeigt, wenn ich jetzt auf das UIImageView klicke.

    Könnt ihr mir bitte einen Tipp geben, was ich beachten muss?

    Ich habe bei den beiden Views und dem UIImageView die Eigenschaft User Interaction Enabled aktiviert.

    Viele Grüße
    Jens
    Viele Grüße
    Jens

    -----------------------
  • Hallo,

    also mich würde zwar eine Antwort noch interessieren, ich habe mich aber gerade für eine andere Variante entschieden...

    Ich habe jetzt einen UIButton (Typ: Rounded Rect). Mit dem habe ich das Verhalten so, wie ich es benötige. Das Einzige, was mir hier aktuell noch fehlt, ist das Anzeigen meines Bildes...

    Viele Grüße
    Jens
    Viele Grüße
    Jens

    -----------------------
  • Hi, was dein zuvor beschriebenes Problem angeht, kann cih so aus der Ferne schwer sagen, wo das Problem liegt, weil je nach Aufbau schnell ein Fehler beim Aufbau liegen könnte.

    Aber wie auch immer; selbst dein Image könntest du mit einer einzeiligen Tabelle aufbauen und in die Zelle einen ImageView packen, wobei bei der Zelle auch schon so was dabei ist; müsstest mal den Aufbau einer Zelle anschauen!

    Jedenfalls hättest du dann ein einfaches Verhalten wie bei jeder anderen Zelle. Das Scrollen der Tabelle kann man ja unterdrücken ...
    Um Rekursion zu verstehen, muss man erst Rekursion verstehen!
  • Hi,

    ja, an einer anderen Stelle habe ich schon ein Image in einer Zelle.
    Ich wollte aber ganz gerne eine Trennung zwischen Image und Text (ich muss unterscheiden, was gedrückt wurde). Da das bei mir mit dem touch nicht geklappt hat, und ich beim Button in relativ kurzer Zeit Erfolg hatte, habe ich mich bei meinem aktuellen Projekt dafür entschieden.

    Ich werde aber das mit dem touch noch mal aufgreifen und probieren, wie die Steuerung per touch läuft.

    Vielen Dank für deine Unterstützung!

    Viele Grüße
    Jens
    Viele Grüße
    Jens

    -----------------------