Ein Window, zwei Views

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

  • Ein Window, zwei Views

    Hallo zusammen,

    ich bin neu hier und daher würde ich mich vor Fragestellung einmal kurz vorstellen.
    Ich heisse Marc, bin aktuell 32 Jahre jung, vor zwei Jahren habe ich mich privat von Windoof getrennt und bin seit dem überzeugter Apple-User.
    Beruflich bin ich Informatiker und programmiere in C#, Java, ABAP, C/C++, VB.NET, Python, usw.

    Nun ist es an der Zeit mich ein bischen privat mit xCode zu beschäftigen.
    Nach den ersten Gehversuchen finde ich den Umstieg, zumindest am Anfang, sehr anspruchsvoll und bin daher auf eure Hilfe angewiesen.

    Ich probiere aktuell verschiedene Sachen aus und entwickle eigentlich gar nichts Bestimmtes.

    Dann komme ich auch schon zu meiner ersten Frage:

    Ich versuche folgendes zu erreichen:

    - es soll ein Window geben
    - es soll zwei oder mehrere subViews geben
    - auf jeder subView gibt es z.B. zwei Buttons und ein Label
    - beim Klick auf die Buttons werden entsprechend unterschiedliche subViews im Window angezeigt
    - die unterschiedlichen subView sollen im MainWindow quasi geladen und angezeigt werden

    bei der iOS Entwicklung kann man das simple mit dem ViewControl Objekt abbilden.
    Wie aber löst ihr das Problem bei einer Mac OS X Applikation? Mit dem ViewControler ist es mir bisher nicht wirklich gelungen.

    Vielen Dank vorab für Ideen, Tipps und Anregungen.

    Gruß Marc
  • Der richtige Weg ist soweit ich weiß schon über die ViewController.
    Allerdings hinkt meine Vertiefung der ViewController auf meinem Zeitplan auch ganz schön hinterher.

    Was genau klappt denn bei deinen Versuchen mit dem NSViewController nicht?
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Quellcode

    1. -(IBAction)view2:(id)sender{
    2. selectView2 *myView = [[selectView2 alloc] initWithNibName:nil bundle:nil];
    3. // Jetzt müsste ich "myView" self oder einem anderen Objekt zuweisen, damit es sichtbar wird
    4. }


    myView ist von der Klasse NSViewControler abgeleitet.
    self ist aber NSView. Die Warnung sagt aus, dass die Typen nicht kompatibel sind.

    Soll heissen, auf dem MainWindow liegt nur eine View vom Typ NSView (Die ist wohl standarmäßig immer dabei).
    Meine zwei subView sind vom Typ NSViewControler.

    Mein Problem ist, dass ich nicht wirklich weiß, wie ich die subViews im MainWindow sichtbar machen soll.

    Muss ich die casten?
  • Nein, Deine NSViewController sind keine subviews vom contentView des Windows. NSWindow ist auch kein view (und hat daher keine subviews), sondern besitzt ein sog. contentView. Diesem werden dann diverse views als subview hinzugefügt. Vorgehensweise:

    Du legst im IB ein NSView in Dein Window und legst ein IBOutlet darauf im entspr. Controller an (z.B. names containerView). Dieses View beinhaltet dann immer die von Deinen NSViewControllern verwalteten views. Beim wechseln der views musst Du u.U. deren Grösse an die vom containerView anpassen.

    Schau Dir mal das Sidebar-Sample von Apple an, das macht genau das, was Du vorhast:
    developer.apple.com/library/ma…e_txt-DontLinkElementID_3

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Markus Müller ()

  • Marc79 schrieb:

    Mein Problem ist, dass ich nicht wirklich weiß, wie ich die subViews im MainWindow sichtbar machen soll.

    Muss ich die casten?

    Nein, ein Karsten hilft dir da auch nicht weiter.

    C-Quellcode

    1. [[self viewToExchange] setView:[selectView2 view]];

    sollte funktionieren.
    Ich würde deinen ViewController aber wirklich irgendwie als VC oder so kennzeichnen und nicht einfach nur 'view' nennen. ;)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Soweit ich das jetzt richtig verstanden habe, hast du also ein Fenster und je nach Bedarf soll in diesem etwas anderes angezeigt werden?
    Ich habe das kürzlich auch gemacht, allerdings auf einem wohl etwas unkonventionellen Weg. Ich habe ein Tabview genommen, den Style auf Tabless gestellt und dann meine unterschiedlichen Views erstellt. Der Wechsel auf ein anderes View erfolgt dann über

    Quellcode

    1. [tabView selectTabViewItemAtIndex:1];

    Ich hoffe ich meine damit das, was du gefragt hast ;)
  • geschafft :-)

    So, nach einigen Stunden des Nachlesens und Ausprobierens hat es nun geklappt.
    Danke allen für die Tipps.

    Den besten Anstoß bekam ich von

    Markus Müller
    . Der Link hat wirklich vieles erklärt.
    Den anderen dennoch danke für die Ideen. Aus diesen habe ich nämlich die Views etwas verschachtelter erstellt und habe auch verschiedene Möglichkeiten ausprobiert!
    So sieht es schon mal net schlecht aus.

    Für den Anfang nicht schlecht :)

    Gruß Marc