ViewController, Benachrichtigungen und addSubview:

  • ViewController, Benachrichtigungen und addSubview:

    Hallo!

    Ich habe mal eine grundsätzliche Frage zum Verständnis: Laut Doku gibt es zwei "legale" Methoden, den View eines ViewControllers sichtbar zu machen: 1. Direkt mit addSubview: (und ich unterstelle: auch insertSubview... usw.) und 2. indirekt durch pushVIewControler..., presentViewController usw.

    Ich verwende nun an einer Stelle insertSubview:atIndex:, weil alle anderen Methoden hier nicht sinnvoll sind.

    Nun beobachte ich, dass viewWillAppear:, didRotateToInterfaceOrientation: und eine ganze Menge anderer Methoden, die um Zusammenhang mit der Präsentation des Views eine Rolle spielen, nicht automatisch aufgerufen sind. Vielmehr muss ich das ganze Gedöns "von Hand" vom ViewController des Superviews an den betroffenen ViewController durchleiten.

    Ist das so richtig oder mach ich was falsch?
  • Hi,

    also den "Root" View eines ViewControllers würde ich immer über push oder present anzeigen lassen. Ich wüßte jetzt auch keine Situation wo das nicht sinnvoll sein könnte.

    Wenn ich auf diesem View zusätzliche Views plazieren will, dann nehme ich dafür addSubView (Deswegen heißt das Dingen ja auch addSUBView und nicht addView.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Ich glaube nicht, dass auf dem iPhone angedacht ist, dass mehr als ein ViewController gleizeitig sichtbar (aktiv) ist. Beim iPad hat man dafür ja extra das PopOver eingeführt. Beim iPhone ist es allerdings so, dass jeder ViewController auch den kompletten Screen "kontrolliert".

    von daher denke ich, ist vlt dein MVC so besser, das UI Konzept aber falsch. ;)

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • fwtag schrieb:

    1. Direkt mit addSubview: (und ich unterstelle: auch insertSubview... usw.)

    Das gilt aber nur, wenn Du den View zu einem Fenster hinzufügst. Das ist aber seit iOS 4 auch obsolet. Da gibt es die Property rootViewController. Bei einem Fenster brauchst Du in der Regel kein insertSubview:atIndex:.


    Thallius schrieb:

    Dann würde ich diesem View aber keinen eigenen Controller geben.

    fwtag schrieb:

    Ich schon - denn sonst ist das nich sauberes MVC. Es geht ja nur um die Darstellung des View.

    Du musst einen Controller nicht von der Klasse UIViewController ableiten. Ein autonomer View sollte in der Regel einen eigenen Controller haben. Aber nur wenn Du diesen View über einen anderen View-Controller oder UIWindow zeigen möchtest, verwendest Du eine Unterklasse von UIViewController. In allen Fällen solltest Du das nicht machen.
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    fwtag schrieb:

    1. Direkt mit addSubview: (und ich unterstelle: auch insertSubview... usw.)

    Das gilt aber nur, wenn Du den View zu einem Fenster hinzufügst. Das ist aber seit iOS 4 auch obsolet. Da gibt es die Property rootViewController. Bei einem Fenster brauchst Du in der Regel kein insertSubview:atIndex:.


    Thallius schrieb:

    Dann würde ich diesem View aber keinen eigenen Controller geben.

    fwtag schrieb:

    Ich schon - denn sonst ist das nich sauberes MVC. Es geht ja nur um die Darstellung des View.

    Du musst einen Controller nicht von der Klasse UIViewController ableiten. Ein autonomer View sollte in der Regel einen eigenen Controller haben. Aber nur wenn Du diesen View über einen anderen View-Controller oder UIWindow zeigen möchtest, verwendest Du eine Unterklasse von UIViewController. In allen Fällen solltest Du das nicht machen.


    Du hast natürlich mal wieder recht. Ich korrigiere also meine Aussage in:

    Dann würde ich diesem View aber keinen eigenen ViewController geben.

    Das war aber eigentlich auch ohne die genaue rhetorische Definition so gemeint.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)