Zugriff auf IBOutlet von View 1 über Knopfdruck in View2

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

  • macmoonshine schrieb:

    @mattik: Dann gibt es also kein falsch und richtig, sinnvoll? Der Code hier im Forum ist also entweder problematisch oder sinnvoll?

    Genau! Ich habe hier schon einigen Bockmist gesehen, aber das war alles schlimmstenfalls die Maserati-Variante.
    Mein Liebling (nicht aus dem Forum, aber aus einem C++-Projekt):

    Quellcode

    1. #ifdef DEBUG
    2. #define private public
    3. #endif

    Nicht falsch, nur Harakiri.

    macmoonshine schrieb:


    Aber ich finde es auch problematisch, etwas problematisch zu nennen. Das hört sich unpositiv an. Sagen wir doch lieber unsinnvoll, gerne mit Doppelplus davor, dazu. Also etwas Falsches ist Unsinn. Gut, darauf können wir uns einigen. ;) +scnr+

    Hehe - ich hatte in dem Beitrag ursprünglich "saublöd" stehen, wollte mich aber dann etwas mehr an die Konventionen halten, nachdem ich den letzten Satz geschrieben hatte. Ein fröhlich subjektiv geschmetteres "Unsinn" finde ich aber auch gut.

    macmoonshine schrieb:


    (Aber mich bitte nicht problematisch verstehen.)

    Nach dem Shannon-Weaver-Kommunikationsmodell kann man sogar etwas formal falsch oder richtig verstehen. Und das Modell ist unter Informatikern die Konvention, oder? ;)
    Multigrad - 360°-Produktfotografie für den Mac
  • Unsinn ist nunmal faktisch richtiger. Es macht keinen Sinn Version 1 zu nehmen, also ist es Unsinn. Da hast Du ja recht. Es ist aber eben nicht falsch.

    Ich kann mit Unsinn problemlos leben da ich es nicht als Schimpfwort sehe so wie Du anscheinend.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • ich krame das thema noch mal aus

    ich bekomm das leider auch nicht hin

    ich habe klasse A , klasse A hat eine Tabelle und ich möchte wenn eine zeile ausgewählt wurde ein Text in ein Label in Klasse B geschrieben wird

    KlasseA.h

    #import "KlasseB.h"
    @property (nonatomic, retain) KlasseB *klasseB;

    KlasseA.m
    @synthesize klasseB;

    viewDidLoad
    klasseB = [[KlasseB alloc] init];

    dealloc
    [klasseB release];

    didSelectedRow
    klasseB.ortLabel.text =@"test";

    KlasseB.h
    @property (nonatomic, retain) IBOutlet UILabel *ortLabel;

    KlasseB.m
    @synthesize ortLabel;

    im IB habe ich in der KlasseB.xib vom Files Owner die IBOutlet mit dem Label verbunden


    im Label passiert aber leider rein gar nix

    kann mir da jemand weiterhelfen ?
    Ich weiß nicht immer wovon ich rede aber ich weiß das ich Recht habe. :saint:
  • mmh ich habe nun in beiden klassen

    appDelegate gemacht = [UIApplication sharedApplication] delegate

    und greife nun von beiden Klassen auf das AppDelegate zu und habe da eine Variable String angelegt, die ich da von der einen Klasse da beschreibe und von der anderen Klasse auslese

    ist das so richtig ?

    können die klassen nicht "direkt mit einander kommunizieren" ?

    axo, ich hab ein window base application


    EDIT:

    danke ramo, ich werde mir das mal anschauen


    Ich weiß nicht immer wovon ich rede aber ich weiß das ich Recht habe. :saint:
  • das funktioniert leider nicht

    ich habe es nun genau so abgeänder wie in dem beispiel von dir

    leider keine reaktion

    einziger unterschied ist nur das ich in der table ne zeile auswähle und dann per tabbar zur klasse B komme,
    das dürfte ja aber eig keinen unterschied machen oder ?


    da meine variante mit dem appDelegate funktioniert , kann man das so benutzen oder ist von so ner art und weise eher abzuraten ?
    Ich weiß nicht immer wovon ich rede aber ich weiß das ich Recht habe. :saint:
  • Ist klasse B sowas wie der Detail View oder evtl. das View das Klasse A aufgerufen hat, oder einfach eine Klasse die AppDelegate initialisiert wurde, oder was? Position ist sehr wichtig aber allgemein würde ich empfehlen bei den Views mit @protocol / delegate zu arbeiten, wenn man Variablen übergeben möchte.
    Meine Beiträge :whistling: stehen unter der Beerware Lizenz!
  • nussratte schrieb:

    Nax schrieb:

    aber allgemein würde ich empfehlen bei den Views mit @protocol / delegate zu arbeiten, wenn man Variablen übergeben möchte.

    dann werde ich mir das mit @protocol noch mal genauer anschauen

    danke


    Ich weiss ja net ob dir schon mal die Projekt-Vorlage "Utility Application" angeschaut hast. Da wird diese Methode genutzt/gezeigt.

    In der MainViewController.h wird der zweite Controller (FlipsideViewController.h) importert und durch ein Event geöffnet:

    • MainViewController.h
      Acht hier besonders auf das <FlipsideViewControllerDelegate>

      Quellcode

      1. #import "FlipsideViewController.h"
      2. @interface MainViewController : UIViewController <FlipsideViewControllerDelegate> {
      3. }
      4. - (IBAction)showInfo:(id)sender;
      5. @end

    • MainViewController.m
      Hier sieht man schon die "Delegate Funktion vom FlipsideView ( - (void)flipsideViewControllerDidFinish: (FlipsideViewController *)controller ) - und natürlich den Aufruf des Views durch "showInfo". in der Funktion-"showInfo" könnte man vom MainView auch Variablen an Flipside übergeben, sofern diese auch in Flipside verfügbar sind.

      Quellcode

      1. #import "MainViewController.h"
      2. @implementation MainViewController
      3. - (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller
      4. {
      5. [self dismissModalViewControllerAnimated:YES];
      6. }
      7. - (IBAction)showInfo:(id)sender
      8. {
      9. FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideView" bundle:nil];
      10. controller.delegate = self;
      11. controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
      12. [self presentModalViewController:controller animated:YES];
      13. [controller release];
      14. }
      15. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
      16. {
      17. // Return YES for supported orientations.
      18. return (interfaceOrientation == UIInterfaceOrientationPortrait);
      19. }
      20. - (void)didReceiveMemoryWarning
      21. {
      22. // Releases the view if it doesn't have a superview.
      23. [super didReceiveMemoryWarning];
      24. // Release any cached data, images, etc. that aren't in use.
      25. }
      26. - (void)viewDidUnload
      27. {
      28. [super viewDidUnload];
      29. // Release any retained subviews of the main view.
      30. // e.g. self.myOutlet = nil;
      31. }
      32. - (void)dealloc
      33. {
      34. [super dealloc];
      35. }
      36. @end
      Alles anzeigen

    • FlipsideViewController.h
      Hier kommt nun @protocol zum Einsatz. Weiter unten könnten auch mehrere Methoden nun definiert werden.

      Quellcode

      1. #import <UIKit/UIKit.h>
      2. @protocol FlipsideViewControllerDelegate;
      3. @interface FlipsideViewController : UIViewController {
      4. }
      5. @property (nonatomic, assign) id <FlipsideViewControllerDelegate> delegate;
      6. - (IBAction)done:(id)sender;
      7. @end
      8. @protocol FlipsideViewControllerDelegate
      9. - (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;
      10. @end
      Alles anzeigen

    • FlipsideViewController.m
      Hier kommt nun der Trick zum einsatz. Die Delegate-Funktionen können von hier aufgerufen werden. Wie in der - (IBAction)done: (id)sender Funktion. Das was in der Funktion passiert wurde aber in der MainViewController.m definiert. Was das heisst kann man sich bestimmt denken.

      Quellcode

      1. #import "FlipsideViewController.h"
      2. @implementation FlipsideViewController
      3. @synthesize delegate=_delegate;
      4. - (void)dealloc
      5. {
      6. [super dealloc];
      7. }
      8. - (void)didReceiveMemoryWarning
      9. {
      10. // Releases the view if it doesn't have a superview.
      11. [super didReceiveMemoryWarning];
      12. // Release any cached data, images, etc. that aren't in use.
      13. }
      14. #pragma mark - View lifecycle
      15. - (void)viewDidLoad
      16. {
      17. [super viewDidLoad];
      18. self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor];
      19. }
      20. - (void)viewDidUnload
      21. {
      22. [super viewDidUnload];
      23. // Release any retained subviews of the main view.
      24. // e.g. self.myOutlet = nil;
      25. }
      26. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
      27. {
      28. // Return YES for supported orientations
      29. return (interfaceOrientation == UIInterfaceOrientationPortrait);
      30. }
      31. #pragma mark - Actions
      32. - (IBAction)done:(id)sender
      33. {
      34. [self.delegate flipsideViewControllerDidFinish:self];
      35. }
      36. @end
      Alles anzeigen



    So Far

    Nax
    Meine Beiträge :whistling: stehen unter der Beerware Lizenz!