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.
Hier ist eine schnelle Version dieses Musters:
Obwohl forwardInvocation:
in Swift deaktiviert ist, können wir weiterhin forwardingTargetForSelector:
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%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 derAnsicht hat die Scroll-Delegate-Methode
aufgerufenhat den Beobachter entfernt
Das Original derAnsicht hat die Scroll-Delegate-Methode
aufgerufen Das Original derAnsicht hat die Scroll-Delegate-Methode
aufgerufen
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.
Tags und Links swift uiscrollview