Wie kann ich in Swift eine UIScrollView-Unterklasse mit einem internen und externen Delegaten erstellen?

9

Ich unterziehe UIScrollView , um einige Features wie Doppeltippen zum Zoomen und eine Bildeigenschaft für Galeriezwecke hinzuzufügen. Aber um den Imageteil zu machen, muss meine Unterklasse ein eigener Delegat sein und das viewForZoomingInScrollView implementieren.

Aber wenn jemand meine Scroll-View-Unterklasse verwendet, möchte er vielleicht auch Delegate-Benachrichtigungen erhalten, um scrollViewDidScroll oder was Sie haben zu sehen.

In Swift, wie bekomme ich beides?

    
Doug Smith 16.11.2014, 03:52
quelle

4 Antworten

12

Hier ist eine schnelle Version dieses Musters:

Obwohl forwardInvocation: in Swift deaktiviert ist, können wir weiterhin forwardingTargetForSelector:

%Vor%     
rintaro 17.11.2014, 04:33
quelle
3

Ich kenne keine 100% Swift-Lösung dafür. Nehmen Sie diese ObjC-Antwort zu dem gleichen Problem, und versuchen, es zu Swift zu portieren, stellt sich heraus, dass dies nicht möglich ist, da NSInvocation in Swift nicht verfügbar ist.

Was wir tun können, ist die Implementierung des vorgeschlagenen MyScrollViewPrivateDelegate in ObjC (vergiss nicht, es in die Bridging-Header-Datei zu importieren) und der Scroll-View-Unterklasse in Swift wie folgt:

MyScrollView.swift

%Vor%

MyScrollViewPrivateDelegate.h

%Vor%

MyScrollViewPrivateDelegate.m

%Vor%     
e1985 17.11.2014 02:44
quelle
2

Hier ist eine einfach funktionierende Playground-Version in Swift 3, die rein als Beobachter agiert und nicht nur als Abfangjäger wie die anderen hier antwortet.

Der Unterschied besteht darin, dass der Delegat-Methoden des ursprünglichen Scroll-View-Delegaten alle als normal bezeichnet werden, während sie von einem anderen Delegaten übernommen werden.

(Sie können dies auf einen Spielplatz kopieren und zum Testen ausführen)

%Vor%

Dies druckt

  

proxy scroll

     Das Original der

Ansicht hat die Scroll-Delegate-Methode

aufgerufen      

hat den Beobachter entfernt

     Das Original der

Ansicht hat die Scroll-Delegate-Methode

aufgerufen      Das Original der

Ansicht hat die Scroll-Delegate-Methode

aufgerufen
    
iwasrobbed 29.08.2017 19:48
quelle
0

UIScrollView definiert bereits eine Eigenschaft delegate , was bedeutet, dass eine UIScrollView Unterklasse keine Eigenschaft namens delegate definieren kann.

Unten, CustomScrollView hat eine UIScrollView Instanz anstelle der Unterklasse UIScrollView . Dadurch kann CustomScrollView eine Eigenschaft delegate definieren, ohne mit der Superklasse in Konflikt zu geraten.

%Vor%     
dxb 30.07.2016 14:35
quelle

Tags und Links