Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions Example/Pods/Pods.xcodeproj/project.pbxproj

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 3 additions & 5 deletions Example/SJSegmentedScrollViewDemo.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@
607FACCF1AFB9204008FA782 = {
CreatedOnToolsVersion = 6.3.1;
DevelopmentTeam = 5DYFD9UMYF;
LastSwiftMigration = 0900;
LastSwiftMigration = 1000;
};
};
};
Expand Down Expand Up @@ -415,8 +415,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.qburst.SJSegmentedScrollViewDemo;
PRODUCT_NAME = SJSegmentedScrollViewDemo;
PROVISIONING_PROFILE = "";
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
Expand All @@ -436,8 +435,7 @@
PRODUCT_NAME = SJSegmentedScrollViewDemo;
PROVISIONING_PROFILE = "";
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class FirstTableViewController: UITableViewController {

refreshControl?.addTarget(self,
action: #selector(handleRefresh(_:)),
for: UIControlEvents.valueChanged)
for: UIControl.Event.valueChanged)
}

@objc func handleRefresh(_ refreshControl: UIRefreshControl) {
Expand Down
5 changes: 4 additions & 1 deletion SJSegmentedScrollView/Classes/SJContentView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ import UIKit

class SJContentView: UIScrollView {

weak var segmentedViewController: SJSegmentedViewController?

var pageIndex = 0
var contentViews = [UIView]()
var contentView: UIView!
Expand Down Expand Up @@ -147,6 +149,7 @@ extension SJContentView: UIScrollViewDelegate {
pageIndex = Int(contentOffset.x / bounds.size.width)
didSelectSegmentAtIndex?(nil, pageIndex, true)
NotificationCenter.default.post(name: Notification.Name(rawValue: "DidChangeSegmentIndex"),
object: pageIndex)
object: segmentedViewController,
userInfo: ["index": pageIndex])
}
}
10 changes: 7 additions & 3 deletions SJSegmentedScrollView/Classes/SJSegmentTab.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ open class SJSegmentTab: UIView {

let kSegmentViewTagOffset = 100
let button = UIButton(type: .custom)


weak var segmentedViewController: SJSegmentedViewController?

var didSelectSegmentAtIndex: DidSelectSegmentAtIndex?
var isSelected = false {
didSet {
Expand Down Expand Up @@ -102,8 +104,10 @@ open class SJSegmentTab: UIView {
@objc func onSegmentButtonPress(_ sender: AnyObject) {

let index = tag - kSegmentViewTagOffset
NotificationCenter.default.post(name: Notification.Name(rawValue: "DidChangeSegmentIndex"),
object: index)

NotificationCenter.default.post(name: Notification.Name(rawValue: "DidChangeSegmentIndex"),
object: segmentedViewController,
userInfo: ["index": index])

if didSelectSegmentAtIndex != nil {
didSelectSegmentAtIndex!(self, index, true)
Expand Down
24 changes: 12 additions & 12 deletions SJSegmentedScrollView/Classes/SJSegmentView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ import UIKit

class SJSegmentView: UIScrollView {

weak var segmentedViewController: SJSegmentedViewController?

var selectedSegmentViewColor: UIColor? {
didSet {
selectedSegmentView?.backgroundColor = selectedSegmentViewColor
Expand Down Expand Up @@ -89,32 +91,29 @@ class SJSegmentView: UIScrollView {
}
}

required override init(frame: CGRect) {
super.init(frame: frame)

convenience init(frame: CGRect, segmentedViewController: SJSegmentedViewController?) {
self.init(frame: frame)

self.segmentedViewController = segmentedViewController

showsHorizontalScrollIndicator = false
showsVerticalScrollIndicator = false
bounces = false



NotificationCenter.default.addObserver(self,
selector: #selector(SJSegmentView.didChangeSegmentIndex(_:)),
name: NSNotification.Name("DidChangeSegmentIndex"),
object: nil)
object: segmentedViewController)
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

deinit {
contentView!.removeObserver(self,
forKeyPath: "contentOffset",
context: nil)

NotificationCenter.default.removeObserver(self,
name:NSNotification.Name("DidChangeSegmentIndex"),
object: nil)
object: segmentedViewController)
}

@objc func didChangeSegmentIndex(_ notification: Notification) {
Expand All @@ -125,7 +124,7 @@ class SJSegmentView: UIScrollView {
}

// select current button
let index = notification.object as? Int
let index = notification.userInfo?["index"] as? Int

if index! < segments.count {
let button = segments[index!]
Expand Down Expand Up @@ -281,6 +280,7 @@ class SJSegmentView: UIScrollView {
}

segmentTab?.didSelectSegmentAtIndex = didSelectSegmentAtIndex
segmentTab?.segmentedViewController = segmentedViewController

return segmentTab!
}
Expand Down
7 changes: 5 additions & 2 deletions SJSegmentedScrollView/Classes/SJSegmentedScrollView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ import UIKit

class SJSegmentedScrollView: UIScrollView {

weak var segmentedViewController: SJSegmentedViewController?

var segmentView: SJSegmentView?

var headerViewHeight: CGFloat! = 0 {
Expand Down Expand Up @@ -128,7 +130,7 @@ class SJSegmentedScrollView: UIScrollView {
translatesAutoresizingMaskIntoConstraints = false
showsHorizontalScrollIndicator = sjShowsHorizontalScrollIndicator
showsVerticalScrollIndicator = sjShowsVerticalScrollIndicator
decelerationRate = UIScrollViewDecelerationRateFast
decelerationRate = UIScrollView.DecelerationRate.fast
bounces = false

addObserver(self, forKeyPath: "contentOffset",
Expand Down Expand Up @@ -259,7 +261,7 @@ class SJSegmentedScrollView: UIScrollView {

if controllers.count > 1 {

segmentView = SJSegmentView(frame: CGRect.zero)
segmentView = SJSegmentView(frame: CGRect.zero, segmentedViewController: segmentedViewController)
segmentView?.controllers = controllers
segmentView?.selectedSegmentViewColor = selectedSegmentViewColor
segmentView?.selectedSegmentViewHeight = selectedSegmentViewHeight!
Expand Down Expand Up @@ -321,6 +323,7 @@ class SJSegmentedScrollView: UIScrollView {
contentView.isScrollEnabled = !sjDisableScrollOnContentView
contentView.translatesAutoresizingMaskIntoConstraints = false
contentView.bounces = segmentBounces
contentView.segmentedViewController = segmentedViewController
scrollContentView.addSubview(contentView)

let horizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[contentView]-0-|",
Expand Down
29 changes: 22 additions & 7 deletions SJSegmentedScrollView/Classes/SJSegmentedViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,22 @@ import UIKit
}

open weak var delegate:SJSegmentedViewControllerDelegate?
var segmentedScrollView = SJSegmentedScrollView(frame: CGRect.zero)

open weak var segmentedScrollViewDelegate: UIScrollViewDelegate? {
get {
return segmentedScrollView.delegate
}
set {
segmentedScrollView.delegate = newValue
}
}

lazy var segmentedScrollView: SJSegmentedScrollView = {
let sv = SJSegmentedScrollView(frame: CGRect.zero)
sv.segmentedViewController = self
return sv
}()

var segmentScrollViewTopConstraint: NSLayoutConstraint?


Expand Down Expand Up @@ -350,8 +365,8 @@ import UIKit
segmentedScrollView.segmentView?.didSelectSegmentAtIndex!(segments[index],
index,
animated)
NotificationCenter.default.post(name: Notification.Name(rawValue: "DidChangeSegmentIndex"),
object: index)
NotificationCenter.default.post(name: Notification.Name(rawValue: "DidChangeSegmentIndex"),
object: self, userInfo: ["index": index])
}
}

Expand Down Expand Up @@ -427,9 +442,9 @@ import UIKit
*/
func addHeaderViewController(_ headerViewController: UIViewController) {

addChildViewController(headerViewController)
addChild(headerViewController)
segmentedScrollView.addHeaderView(headerViewController.view)
headerViewController.didMove(toParentViewController: self)
headerViewController.didMove(toParent: self)
}

/**
Expand All @@ -443,9 +458,9 @@ import UIKit
var index = 0
for controller in contentControllers {

addChildViewController(controller)
addChild(controller)
segmentedScrollView.addContentView(controller.view, frame: view.bounds)
controller.didMove(toParentViewController: self)
controller.didMove(toParent: self)

let delegate = controller as? SJSegmentedViewControllerViewSource
var observeView = controller.view
Expand Down
4 changes: 2 additions & 2 deletions SJSegmentedScrollView/Classes/SJUtil.swift
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class SJUtil {
var topSpacing: CGFloat = 0.0
let navigationController = viewController.navigationController

if navigationController?.childViewControllers.last == viewController {
if navigationController?.children.last == viewController {

if navigationController?.isNavigationBarHidden == false {
topSpacing = UIApplication.shared.statusBarFrame.height
Expand Down Expand Up @@ -77,7 +77,7 @@ extension String {
let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
let boundingBox = self.boundingRect(with: constraintRect,
options: .usesLineFragmentOrigin,
attributes: [NSAttributedStringKey.font: font], context: nil)
attributes: [NSAttributedString.Key.font: font], context: nil)
return boundingBox.width
}
}