Übergeben von Bildlaufereignissen an die übergeordnete NSScrollView

7

Ich brauche NSTextViews fester Größe in einem größeren Scroll-Fenster. IB erfordert, dass die Textansichten innerhalb ihrer eigenen NSScrollViews sind, auch wenn ihre Min / Max-Größen festgelegt sind, so dass sie nicht tatsächlich scrollen. Wenn Trackpad-Gesten innerhalb der Textansichtsrahmen erstellt werden (unabhängig davon, ob sie den Fokus haben), werden sie von den Textansichten der Textansichten erfasst, sodass nichts passiert.

Wie erkenne ich die Scrollviews der Textansichten, um Scroll-Ereignisse bis zum Haupt-Scrollview des Fensters weiterzuleiten? (Oder vielleicht sollte ich fragen, wie ich dem Hauptscrollview des Fensters befehle, diese Ereignisse selbst zu behandeln und sie nicht an seine untergeordneten Scrollviews weiterzuleiten.)

Die IB-Struktur ist wie folgt:

  • Fenster
    • Fenster-Inhaltsansicht
      • großer Bildlauf für Fenster (gewünschtes Ziel für Bildlaufereignisse)
        • -Box
          • austauschbare Inhaltsansicht in einem separaten Xib
            • scrollview für Textansicht
              • Textansicht
Und, ja, das Fenster scrollt korrekt, wenn die Textansichten nicht den Fokus haben.     
Wienke 09.06.2011, 17:40
quelle

4 Antworten

3

Das ist wirklich peinlich. Nach wochenlangem Ablegen habe ich einen ersten Versuch unternommen, ein unterklassiertes NSScrollView passiv zu machen - und es stellte sich heraus, dass es kein Kinderspiel war.

Hier ist die Unterklasse:

h Datei:

%Vor%

m-Datei:

%Vor%

Für diese passiven scrollviews müssen keine Steckdosen hergestellt werden. Ich gebe ihnen ihre Refs zum Haupt-Scrollview, direkt nachdem ihre xibs der NSBox als Inhalt zugewiesen wurden:

%Vor%

Das ist es. Funktioniert wie ein Zauber.

    
Wienke 25.06.2011, 17:39
quelle
10

Sie müssen keine Steckdose "svActive" erstellen, um Ihre Super-Scrollansicht zu verfolgen. Schreiben Sie diesen Satz einfach in das scrollWheel-Ereignis:

%Vor%

Dadurch wird das Ereignis an den nächsten Responder in der Responder-Kette weitergeleitet.

    
phaibin 17.10.2011 02:53
quelle
7

IB erfordert keine Textansicht innerhalb eines NSScrollView ; Dies ist nur der Standardwert, da Sie die Scroll-Ansicht in den meisten Fällen verwenden möchten. Wählen Sie NSTextView und wählen Sie Layout & gt; Nicht eingebettete Objekte. Beachten Sie, dass Sie nach diesem Punkt Ihre Ansicht in IB nicht mehr verschieben oder ihre Größe ändern können. Dies scheint ein Fehler zu sein.

Hier ist ein Beispiel, wie zwei NSTextViews in ein einzelnes NSScrollView eingefügt werden können.

Fügen Sie zwei Textansichten nebeneinander hinzu; lege etwas Text hinein, damit du sehen kannst, was passiert.

Wählen Sie die Ansichten aus. wähle Layout & gt; Objekte einbetten In & gt; Bildlaufansicht Dies bringt sie in eine generische NSView innerhalb einer NSScrollView .

Wählen Sie die Textansichten aus; wähle Layout & gt; Nicht eingebettete Objekte.

Deaktivieren Sie die Federn und Verstrebungen (automatische Größenanpassung) für jede Textansicht, damit sie beim Verkleinern der Bildlaufansicht nicht in der Größe geändert werden.

Achten Sie auf die Höhe der Dokumentenansicht (hier ist es 175).

Verringern Sie die Bildlaufansicht. Dadurch wird auch die Dokumentansicht ( NSView ) angepasst.

Stellen Sie die Dokumentansicht auf ihre ursprüngliche Größe wieder her (ich setze die Höhe auf 175 zurück).

Fertig! Scrollen funktioniert wie erwartet.

    
Nicholas Riley 10.06.2011 02:40
quelle
1

Ich finde, dass IB3 und Xcode4 beide gegen dich kämpfen, wenn du versuchst, dies direkt zu tun, aber du kannst es indirekt tun. Ziehen Sie zuerst die Textansicht aus der Bildlaufansicht und löschen Sie die Bildlaufansicht. Sie werden mit einer verwaisten Textansicht enden. Ich weiß nicht, wie ich IB dazu bringen kann, dir das in dein Fenster zu legen, aber es wird in deiner NIB sein. Hängen Sie nun ein IBOutlet an, und führen Sie zur Laufzeit ein addSubview: aus und passen Sie seinen Frame an, um ihn in die gewünschte Scrollansicht zu verschieben.

Meiner Erfahrung nach sind NIBs eine gute Sache, aber jede komplexe NIB, mit der ich jemals gearbeitet habe, brauchte eine abschließende Neuordnung des Codes.

    
Rob Napier 10.06.2011 02:39
quelle

Tags und Links