SubViews für Anfänger

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

  • SubViews für Anfänger

    Hallo,
    ich möchte folgendes machen: Auf Knopfdruck soll in einem CustomView ein Rechteck erscheinen, in dem einige Textfelder und Labels sind. Wenn ich das richtig verstanden habe, macht man das über SubViews. Ich habe also in XCode ein neuen View erstellt und die Textfelder und Labels hinzugefügt. Dann den Knopf mit der Action erstellt und mit dem CustomView verbunden. Die Action:

    Quellcode

    1. - (IBAction)doAddSubView:(id)sender { NSViewController *myViewController = [[NSViewController alloc] initWithNibName:@"MySubView" bundle:nil]; [self addSubview:myViewController];}


    Die Action habe ich mir von wo anders geklaut, da ich noch Anfänger bin. Sie funktioniert aber nicht. Ich weiß es allerdings auch nicht besser. Könnte mir jemand sagen ob ich auf dem richtigen Weg bin?
  • Hi bekommst Du kein Warning ?

    Ich nehme einfach mal an, das self in diesem Fall ein ViewController ist und kein View. Dann sollte aber ein Warning kommen so ala

    "UIViewcontroller my not respond to selector addSubview"

    Weiterhin heißt das Komando "AddSubview" also wird hier ein View geadded. Was erzeugst Du aber ? Du hast es ja sogar so genannt. Es ist ein ViewController. Ergo must Du wenn überhaupt dann die Views der beiden Controller benutzen. Also

    [self.view addSubview:myController.view];

    Leider weiß ich nicht ob es hier um iOs oder OSX geht und von OSX habe ich keine Ahnung. Aber bei iOs würdest Du so auch nicht arbeiten. Da würdest Du den neuen Controller mit einem

    [self presentModalViewController:myViewController animated:YES];

    anzeigen.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Tut mir leid, ich komme damit noch nicht ganz zurecht... Und ich habe erstmal grundsätzliche Fragen: Kann ich denn überhaupt so arbeiten, d.h. kann ich einen neuen View anlegen (über die Templates -> User Interface), den dann im IB bearbeiten (Felder usw. hinzufügen) und den dann als SubView in meinen "HauptView" hinzufügen (mit addSubview)? Oder geht das ganze nur programmatisch?

    Das iOS Beispiel hilft mir leider nicht weiter... Ich weiß nicht wie ich das auf Mac OS übertragen kann.
  • Du schreibst, du hättest gar keinen Controller?
    Ich würde an deiner Stelle einen ViewController zufügen, mit Xib. Du must ja auch irgendiwe auf deine TextFelder und Buttons zurgreifen können.

    Dannn kannst du im anderen Controller in der Action schreiben:

    Quellcode

    1. DetailViewController* detailController = [[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:nil];
    2. [self presendModelViewController: detailController animated:YES];
    3. [detailController release];
    Gruß

    Robin
  • Warum einen ViewController? Warum keinen View? Für meinen anderen View habe ich gar keinen Controller. Dem habe ich nur die Zuordnung zu einer NSView Klasse im IB gegeben, damit ich darin zeichnen kann... Kann ich das nicht ähnlich machen bei meinem neuen SubView? Oder wobei liegt der Vorteil eines ViewControllers? Wie würde ich einen ViewController zu meinem MainView hinzufügen?
  • Leute, vergesst doch mal das Telefon! Hier geht es um Mac OS X! Ja, es gibt auch noch etwas anderes als iOS.

    DaPhil schrieb:

    Kann ich denn überhaupt so arbeiten, d.h. kann ich einen neuen View anlegen (über die Templates -> User Interface), den dann im IB bearbeiten (Felder usw. hinzufügen) und den dann als SubView in meinen "HauptView" hinzufügen (mit addSubview)?

    Ja, das kannst Du.

    DaPhil schrieb:

    Quellcode

    1. - (IBAction)doAddSubView:(id)sender {
    2. NSViewController *myViewController = [[NSViewController alloc] initWithNibName:@"MySubView" bundle:nil];
    3. [self addSubview:myViewController];
    4. }


    Könnte mir jemand sagen ob ich auf dem richtigen Weg bin?

    Der Weg ist schon richtig, jedoch musst Du unterscheiden zwischen View und Controller. Views sind auf dem Bildschirm sichtbar und bilden die Viewhierachie. Controller verwalten lediglich die Views. In Zeile 3 musst Du also self durch eine Referenz auf den View ersetzen, der den Subview hinzugefügt bekommen soll und als Parameter musst Du den View übergeben, den Dein ViewController verwaltet. Also in etwa so:

    Quellcode

    1. [theView adSubview:[myViewController view]];

    Wichtig ist, dass Du die View-Eigenschaft des Controllers im IB mit Deinem View auch verbindest.

    Michael