Skip to content

Instantly share code, notes, and snippets.

@JoshuaSullivan
Created December 8, 2017 20:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JoshuaSullivan/ebfe4b9f072b37070427fbd58d04d06f to your computer and use it in GitHub Desktop.
Save JoshuaSullivan/ebfe4b9f072b37070427fbd58d04d06f to your computer and use it in GitHub Desktop.
These two shims allow you to split the UIScrollViewDelegate calls from the collection and table view delegate calls.
//
// CollectionViewDelegateSplitter.swift
//
// Created by Joshua Sullivan on 12/7/17.
//
import UIKit
class CollectionViewDelegateSplitter: NSObject, UICollectionViewDelegate {
/// The object which will receive collection-related delegate actions.
weak var collectionDelegate: UICollectionViewDelegate?
/// The object which will receive scrolling-related delegate actions.
weak var scrollDelegate: UIScrollViewDelegate?
// MARK: - UICollectionViewDelegate
override func responds(to aSelector: Selector!) -> Bool {
if let del = collectionDelegate, del.responds(to: aSelector) {
return true
}
if let del = scrollDelegate, del.responds(to: aSelector) {
return true
}
return false
}
override func forwardingTarget(for aSelector: Selector!) -> Any? {
let desc = aSelector.description.lowercased()
if desc.contains("scroll") {
if
let del = scrollDelegate,
del.responds(to: aSelector)
{
return del
}
} else if desc.contains("collection") {
if
let del = collectionDelegate,
del.responds(to: aSelector)
{
return del
}
}
return nil
}
}
//
// TableViewDelegateSplitter.swift
//
// Created by Joshua Sullivan on 12/8/17.
//
import UIKit
class TableViewDelegateSplitter: NSObject, UITableViewDelegate {
/// The object which will receive table-related delegate actions.
weak var tableDelegate: UITableViewDelegate?
/// The object which will receive scrolling-related delegate actions.
weak var scrollDelegate: UIScrollViewDelegate?
// MARK: - UICollectionViewDelegate
override func responds(to aSelector: Selector!) -> Bool {
if let del = tableDelegate, del.responds(to: aSelector) {
return true
}
if let del = scrollDelegate, del.responds(to: aSelector) {
return true
}
return false
}
override func forwardingTarget(for aSelector: Selector!) -> Any? {
let desc = aSelector.description.lowercased()
if desc.contains("scroll") {
if
let del = scrollDelegate,
del.responds(to: aSelector)
{
return del
}
} else if desc.contains("tables") {
if
let del = tableDelegate,
del.responds(to: aSelector)
{
return del
}
}
return nil
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment