Storyboards und Übergabe von Werten

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

  • Storyboards und Übergabe von Werten

    Hallo,

    ich habe zwei ViewController in einem Storyboard und möchte nun, wenn man eine Tabellenzelle anklickt ein paar Informationen mit dem aufruf sozusagen übergeben. Ich möchte also, dass der View controller der mit klicken auf die Tabellenzelle geöffnet wird diese Informationen nutzen kann.
    Mein Blog: danielbocksteger.wordpress.com/

    Schaut doch mal vorbei !
    :thumbsup:
  • TableViewCell mit anderem ViewController per Seque verbinden (Strg Click&Drag wie auch bei IBActions/IBOutlets) und dem Ding einen Namen geben.

    Im aufrufenden ViewController dann

    Quellcode

    1. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    2. {
    3. if ([segue.identifier isEqualToString:@"NameDerSeque"])
    4. {
    5. DetailViewController *detailViewController = [segue destinationViewController];
    6. // Properties des detailViewControllers setzen
    7. }
    8. }


    Bei Unklarheiten zu diesem Ablauf kann auch das WWDC Video Introducing Interface Builder Storyboarding helfen
  • Danke schonmal, Aber :D

    Quellcode

    1. 2011-12-16 16:37:30.686 MindMap-Todo[2624:f803] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<TaskContentViewController_iPhone 0x6c644d0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key describtionTextBox.'
    2. *** First throw call stack:
    3. (0x11c3052 0x15acd0a 0x11c2f11 0xaa0032 0xa11f7b 0xa11eeb 0xa2cd60 0x31f91a 0x11c4e1a 0x112e821 0x31e46e 0x1c5e2c 0x1c63a9 0x1c65cb 0x1c6941 0x1d847d 0x1d866f 0x1d893b 0x1d93df 0x1d9986 0x1d95a4 0x530552 0x524e30 0x1906d9 0x190952 0xa1886d 0x1197966 0x1197407 0x10fa7c0 0x10f9db4 0x10f9ccb 0x1865879 0x186593e 0x100a9b 0x22c2 0x2235)
    4. terminate called throwing an exception


    Code sieht so aus :

    Quellcode

    1. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    2. {
    3. if ([segue.identifier isEqualToString:@"taskSeque"])
    4. {
    5. TaskContentViewController_iPhone *taskContentController = [segue destinationViewController];
    6. // Properties des detailViewControllers setzen
    7. [taskContentController setOwnerName:nil];
    8. [taskContentController setDescribtion:nil];
    9. [taskContentController setTaskState:nil];
    10. }
    11. }
    Alles anzeigen
    Mein Blog: danielbocksteger.wordpress.com/

    Schaut doch mal vorbei !
    :thumbsup:
  • Hallo Zusammen,

    ich hab ein ähnliches Problem. Mein Code sieht wie folgt aus:

    - (void) tableView: (UITablView *) tableView accessoryButtonTappedForRowWithIndexPath: (NSIndePath *)indexPath
    {
    [self performSegueWithIdentifier:@"SgBa" sender:self];
    }

    - (void) prepareForSegue: (UIStoryboardSegue *)segue sender: (id) sender
    {
    if ([segue.identifier isEqualToString:@"SgBa"]) {
    PdfViewController_BA *PDFViewControllerBA = (PDFViewController_BA *) [segue.destinationViewController topViewController];
    PdfViewControllerBa.Labeltest.text = @"Test";
    }
    }
    Der Ziel-View wird aufgerufen, aber der Wert des Labels nicht gesetzt.
    Bin dankbar für jede Hilfe!
    Grüße
    Morten
  • Zu dem Zeitpunkt ist das Label noch nicht initialisiert. Das wird es erst in viewDidLoad() des Controllers. Du must Dir eine Porperty in den Controller packen und odrt den Wert zwischenspeichern bis du ihn in viewDidLoad() zuweisen kannst.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Funktioniert top. Vielen Dank an euch ;)

    Nachtrag:
    ich ahbe ein Array, mit Namen drin, davon soll halt imemr nur einer(der name, der zur ausgewählten Zelle im tableView gehört), dem nächsten kontroller übergeben wird.

    Beispiel:
    Array Name enthält:
    - Bocksteger
    - Dummy
    - foo
    - bar

    und der nächste kontrolelr soll dann beispielsweise immer zu einem, der Namen, wieder andere namen, z.B. namensverwandte ausgeben.

    Meine Idee war nun, mit didSelectRowAtIndexPath den zur Zelle gehörigen Namen in ne Variable zu schrieben und dann mit perpareForSeque zu übergeben. das problem:
    prepare for seque wird vor didSelectRowAtIndePath aufgerufen, wa smache ich nun ? :)
    Mein Blog: danielbocksteger.wordpress.com/

    Schaut doch mal vorbei !
    :thumbsup:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von danielBocksteger_01 ()

  • Hallo Daniel,

    habe das bei mir gerade mal ausprobiert.

    Es wird erst didSelectRowAtIndexPath und dann prepareForSegue aufgerufen.

    Das siehst du, wenn du folgende Zeile jeweils in die Methoden packst:

    NSLog(@"%s",__PRETTY_FUNCTION__);

    Dann siehst du in der Konsole in welcher Reihenfolge diese aufgerufen werden.

    Gruß

    Morten
  • um nochmal auf die Aufrufreihenfolge zurück zu kommen :

    Quellcode

    1. 2012-01-10 14:59:33.934 ToDo-Manager[1286:f803] -[MetaListViewController_iPhone prepareForSegue:sender:]
    2. 2012-01-10 14:59:33.938 ToDo-Manager[1286:f803] -[MetaListViewController_iPhone tableView:didSelectRowAtIndexPath:]


    Könnte mir evtl. jemand ein Beispiel für die nutzung von indexPathForSelectedRow geben ? :)
    Mein Blog: danielbocksteger.wordpress.com/

    Schaut doch mal vorbei !
    :thumbsup:

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