Skip to content

Commit 55ac6dd

Browse files
authored
'fix deprecated APIs'
1 parent 5ce180a commit 55ac6dd

File tree

2 files changed

+81
-35
lines changed

2 files changed

+81
-35
lines changed

Classes/iOSDropDown.swift

+74-17
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ open class DropDown : UITextField{
5858
fileprivate var parentController:UIViewController?
5959
fileprivate var pointToParent = CGPoint(x: 0, y: 0)
6060
fileprivate var backgroundView = UIView()
61-
61+
fileprivate var keyboardHeight:CGFloat = 0
6262

6363
public var optionArray = [String]() {
6464
didSet{
@@ -91,6 +91,21 @@ open class DropDown : UITextField{
9191
arrow.frame = CGRect(x: center.x - arrowSize/2, y: center.y - arrowSize/2, width: arrowSize, height: arrowSize)
9292
}
9393
}
94+
@IBInspectable public var arrowColor: UIColor = .black {
95+
didSet{
96+
arrow.arrowColor = arrowColor
97+
}
98+
}
99+
@IBInspectable public var checkMarkEnabled: Bool = true {
100+
didSet{
101+
102+
}
103+
}
104+
@IBInspectable public var handleKeyboard: Bool = true {
105+
didSet{
106+
107+
}
108+
}
94109

95110
// Init
96111
public override init(frame: CGRect) {
@@ -121,13 +136,38 @@ open class DropDown : UITextField{
121136
let arrowContainerView = UIView(frame: rightView.frame)
122137
self.rightView?.addSubview(arrowContainerView)
123138
let center = arrowContainerView.center
124-
arrow = Arrow(origin: CGPoint(x: center.x - arrowSize/2,y: center.y - arrowSize/2),size: arrowSize)
139+
arrow = Arrow(origin: CGPoint(x: center.x - arrowSize/2,y: center.y - arrowSize/2),size: arrowSize )
125140
arrowContainerView.addSubview(arrow)
126141

127142
self.backgroundView = UIView(frame: .zero)
128143
self.backgroundView.backgroundColor = .clear
129144
addGesture()
145+
if isSearchEnable && handleKeyboard{
146+
NotificationCenter.default.addObserver(forName: NSNotification.Name.UIKeyboardWillShow, object: nil, queue: nil) { (notification) in
147+
if self.isFirstResponder{
148+
let userInfo:NSDictionary = notification.userInfo! as NSDictionary
149+
let keyboardFrame:NSValue = userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue
150+
let keyboardRectangle = keyboardFrame.cgRectValue
151+
self.keyboardHeight = keyboardRectangle.height
152+
if !self.isSelected{
153+
self.showList()
154+
}
155+
}
156+
157+
}
158+
NotificationCenter.default.addObserver(forName: NSNotification.Name.UIKeyboardWillHide, object: nil, queue: nil) { (notification) in
159+
if self.isFirstResponder{
160+
self.keyboardHeight = 0
161+
}
162+
}
163+
}
130164
}
165+
166+
deinit {
167+
NotificationCenter.default.removeObserver(self)
168+
}
169+
170+
131171
fileprivate func addGesture (){
132172
let gesture = UITapGestureRecognizer(target: self, action: #selector(touchAction))
133173
if isSearchEnable{
@@ -157,9 +197,9 @@ open class DropDown : UITextField{
157197
public func showList() {
158198
if parentController == nil{
159199
parentController = self.parentViewController
160-
backgroundView.frame = parentController?.view.frame ?? backgroundView.frame
161-
pointToParent = getConvertedPoint(self, baseView: parentController?.view)
162200
}
201+
backgroundView.frame = parentController?.view.frame ?? backgroundView.frame
202+
pointToParent = getConvertedPoint(self, baseView: parentController?.view)
163203
parentController?.view.insertSubview(backgroundView, aboveSubview: self)
164204
TableWillAppearCompletion()
165205
if listHeight > rowHeight * CGFloat( dataArray.count) {
@@ -184,6 +224,11 @@ open class DropDown : UITextField{
184224
parentController?.view.addSubview(shadow)
185225
parentController?.view.addSubview(table)
186226
self.isSelected = true
227+
let height = (self.parentController?.view.frame.height ?? 0) - (self.pointToParent.y + self.frame.height + 5)
228+
var y = self.pointToParent.y+self.frame.height+5
229+
if height < (keyboardHeight+tableheightX){
230+
y = self.pointToParent.y - tableheightX
231+
}
187232
UIView.animate(withDuration: 0.9,
188233
delay: 0,
189234
usingSpringWithDamping: 0.4,
@@ -192,16 +237,18 @@ open class DropDown : UITextField{
192237
animations: { () -> Void in
193238

194239
self.table.frame = CGRect(x: self.pointToParent.x,
195-
y: self.pointToParent.y+self.frame.height+5,
240+
y: y,
196241
width: self.frame.width,
197242
height: self.tableheightX)
198243
self.table.alpha = 1
199244
self.shadow.frame = self.table.frame
200245
self.shadow.dropShadow()
201246
self.arrow.position = .up
247+
202248

203249
},
204250
completion: { (finish) -> Void in
251+
self.layoutIfNeeded()
205252

206253
})
207254

@@ -244,21 +291,28 @@ open class DropDown : UITextField{
244291
}else{
245292
self.tableheightX = listHeight
246293
}
294+
let height = (self.parentController?.view.frame.height ?? 0) - (self.pointToParent.y + self.frame.height + 5)
295+
var y = self.pointToParent.y+self.frame.height+5
296+
if height < (keyboardHeight+tableheightX){
297+
y = self.pointToParent.y - tableheightX
298+
}
247299
UIView.animate(withDuration: 0.2,
248300
delay: 0.1,
249301
usingSpringWithDamping: 0.9,
250302
initialSpringVelocity: 0.1,
251303
options: .curveEaseInOut,
252304
animations: { () -> Void in
253305
self.table.frame = CGRect(x: self.pointToParent.x,
254-
y: self.pointToParent.y+self.frame.height+5,
306+
y: y,
255307
width: self.frame.width,
256308
height: self.tableheightX)
257-
309+
self.shadow.frame = self.table.frame
310+
self.shadow.dropShadow()
258311

259312
},
260313
completion: { (didFinish) -> Void in
261-
self.shadow.layer.shadowPath = UIBezierPath(rect: self.table.bounds).cgPath
314+
// self.shadow.layer.shadowPath = UIBezierPath(rect: self.table.bounds).cgPath
315+
self.layoutIfNeeded()
262316

263317
})
264318
}
@@ -343,7 +397,7 @@ extension DropDown: UITableViewDataSource {
343397
cell!.imageView!.image = UIImage(named: imageArray[indexPath.row])
344398
}
345399
cell!.textLabel!.text = "\(dataArray[indexPath.row])"
346-
cell!.accessoryType = indexPath.row == selectedIndex ? .checkmark : .none
400+
cell!.accessoryType = (indexPath.row == selectedIndex) && checkMarkEnabled ? .checkmark : .none
347401
cell!.selectionStyle = .none
348402
cell?.textLabel?.font = self.font
349403
cell?.textLabel?.textAlignment = self.textAlignment
@@ -370,7 +424,7 @@ extension DropDown: UITableViewDelegate {
370424
touchAction()
371425
self.endEditing(true)
372426
}
373-
if let selected = optionArray.index(where: {$0 == selectedText}) {
427+
if let selected = optionArray.firstIndex(where: {$0 == selectedText}) {
374428
if let id = optionIds?[selected] {
375429
didSelectCompletion(selectedText, selected , id )
376430
}else{
@@ -396,7 +450,13 @@ enum Position {
396450
}
397451

398452
class Arrow: UIView {
399-
453+
let shapeLayer = CAShapeLayer()
454+
var arrowColor:UIColor = .black {
455+
didSet{
456+
shapeLayer.fillColor = arrowColor.cgColor
457+
}
458+
}
459+
400460
var position: Position = .down {
401461
didSet{
402462
switch position {
@@ -419,7 +479,7 @@ class Arrow: UIView {
419479
}
420480
}
421481

422-
init(origin: CGPoint, size: CGFloat) {
482+
init(origin: CGPoint, size: CGFloat ) {
423483
super.init(frame: CGRect(x: origin.x, y: origin.y, width: size, height: size))
424484
}
425485

@@ -445,8 +505,9 @@ class Arrow: UIView {
445505
bezierPath.close()
446506

447507
// Mask to path
448-
let shapeLayer = CAShapeLayer()
449508
shapeLayer.path = bezierPath.cgPath
509+
// shapeLayer.fillColor = arrowColor.cgColor
510+
450511
if #available(iOS 12.0, *) {
451512
self.layer.addSublayer (shapeLayer)
452513
} else {
@@ -468,10 +529,6 @@ extension UIView {
468529
layer.rasterizationScale = scale ? UIScreen.main.scale : 1
469530
}
470531

471-
472-
}
473-
474-
extension UIView {
475532
var parentViewController: UIViewController? {
476533
var parentResponder: UIResponder? = self
477534
while parentResponder != nil {

iOSDropDown/Classes/iOSDropDown.swift

+7-18
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,12 @@ open class DropDown : UITextField{
1414
var table : UITableView!
1515
var shadow : UIView!
1616
public var selectedIndex: Int?
17-
public var scrollToSelectedIndex:Bool = false
18-
public var selectedTextColor: UIColor = UIColor(red: 2/255, green: 2/255, blue: 2/255, alpha: 1)
19-
var defaultTextColor = UIColor(red: 2/255, green: 2/255, blue: 2/255, alpha: 1)
17+
18+
2019
//MARK: IBInspectable
2120

2221
@IBInspectable public var rowHeight: CGFloat = 30
2322
@IBInspectable public var rowBackgroundColor: UIColor = .white
24-
@IBInspectable public var rowTextColor: UIColor = .black
2523
@IBInspectable public var selectedRowColor: UIColor = .cyan
2624
@IBInspectable public var hideOptionsWhenSelect = true
2725
@IBInspectable public var isSearchEnable: Bool = true {
@@ -57,7 +55,7 @@ open class DropDown : UITextField{
5755
fileprivate var tableheightX: CGFloat = 100
5856
fileprivate var dataArray = [String]()
5957
fileprivate var imageArray = [String]()
60-
fileprivate weak var parentController:UIViewController?
58+
fileprivate var parentController:UIViewController?
6159
fileprivate var pointToParent = CGPoint(x: 0, y: 0)
6260
fileprivate var backgroundView = UIView()
6361
fileprivate var keyboardHeight:CGFloat = 0
@@ -145,10 +143,10 @@ open class DropDown : UITextField{
145143
self.backgroundView.backgroundColor = .clear
146144
addGesture()
147145
if isSearchEnable && handleKeyboard{
148-
NotificationCenter.default.addObserver(forName: UIResponder.keyboardWillShowNotification, object: nil, queue: nil) { (notification) in
146+
NotificationCenter.default.addObserver(forName: NSNotification.Name.UIKeyboardWillShow, object: nil, queue: nil) { (notification) in
149147
if self.isFirstResponder{
150148
let userInfo:NSDictionary = notification.userInfo! as NSDictionary
151-
let keyboardFrame:NSValue = userInfo.value(forKey: UIResponder.keyboardFrameEndUserInfoKey) as! NSValue
149+
let keyboardFrame:NSValue = userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue
152150
let keyboardRectangle = keyboardFrame.cgRectValue
153151
self.keyboardHeight = keyboardRectangle.height
154152
if !self.isSelected{
@@ -157,7 +155,7 @@ open class DropDown : UITextField{
157155
}
158156

159157
}
160-
NotificationCenter.default.addObserver(forName: UIResponder.keyboardWillHideNotification, object: nil, queue: nil) { (notification) in
158+
NotificationCenter.default.addObserver(forName: NSNotification.Name.UIKeyboardWillHide, object: nil, queue: nil) { (notification) in
161159
if self.isFirstResponder{
162160
self.keyboardHeight = 0
163161
}
@@ -223,13 +221,6 @@ open class DropDown : UITextField{
223221
table.layer.cornerRadius = 3
224222
table.backgroundColor = rowBackgroundColor
225223
table.rowHeight = rowHeight
226-
if scrollToSelectedIndex{
227-
if let selectedIndex = selectedIndex {
228-
let indexPath = IndexPath(row: selectedIndex, section: 0)
229-
self.table.scrollToRow(at: indexPath, at: .top, animated: true)
230-
self.table.reloadData()
231-
}
232-
}
233224
parentController?.view.addSubview(shadow)
234225
parentController?.view.addSubview(table)
235226
self.isSelected = true
@@ -405,10 +396,7 @@ extension DropDown: UITableViewDataSource {
405396
if self.imageArray.count > indexPath.row {
406397
cell!.imageView!.image = UIImage(named: imageArray[indexPath.row])
407398
}
408-
409-
cell!.textLabel!.textColor = rowTextColor
410399
cell!.textLabel!.text = "\(dataArray[indexPath.row])"
411-
cell?.textLabel!.textColor = (indexPath.row == selectedIndex) ? selectedTextColor : defaultTextColor
412400
cell!.accessoryType = (indexPath.row == selectedIndex) && checkMarkEnabled ? .checkmark : .none
413401
cell!.selectionStyle = .none
414402
cell?.textLabel?.font = self.font
@@ -553,3 +541,4 @@ extension UIView {
553541
}
554542
}
555543

544+

0 commit comments

Comments
 (0)