From 978ba68d72e519ccae57b5448f9acaecdb8e56e1 Mon Sep 17 00:00:00 2001 From: Marco Betschart Date: Mon, 11 Dec 2017 14:40:28 +0100 Subject: [PATCH 1/5] Added countrySelectorRow As PushRow in order to allow country selection instead of a textField --- Cartfile | 3 +- Cartfile.resolved | 2 +- Example/Example/Base.lproj/Main.storyboard | 32 +++++- Example/Example/ViewController.swift | 37 +++++-- Sources/PostalAddressCell.swift | 108 +++++++++++++++++++-- Sources/PostalAddressCell.xib | 30 +++++- Sources/PostalAddressRow.swift | 17 ++++ 7 files changed, 199 insertions(+), 30 deletions(-) diff --git a/Cartfile b/Cartfile index ec2bbb1..48a5194 100644 --- a/Cartfile +++ b/Cartfile @@ -1 +1,2 @@ -github "xmartlabs/Eureka" ~> 4.0 +#github "xmartlabs/Eureka" ~> 4.0 +github "Mandelkind/Eureka" "SplitRow" diff --git a/Cartfile.resolved b/Cartfile.resolved index c1b5a43..f37dc4e 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1 +1 @@ -github "xmartlabs/Eureka" "4.0.1" +github "Mandelkind/Eureka" "be4c01d20b1bcfcaf990baae092d75ff2bfe07b2" diff --git a/Example/Example/Base.lproj/Main.storyboard b/Example/Example/Base.lproj/Main.storyboard index d12cc95..c579e4f 100644 --- a/Example/Example/Base.lproj/Main.storyboard +++ b/Example/Example/Base.lproj/Main.storyboard @@ -1,8 +1,12 @@ - - + + + + + - + + @@ -14,13 +18,31 @@ - + - + + + + + + + + + + + + + + + + + + + diff --git a/Example/Example/ViewController.swift b/Example/Example/ViewController.swift index e7fd60a..dccc38b 100644 --- a/Example/Example/ViewController.swift +++ b/Example/Example/ViewController.swift @@ -21,16 +21,33 @@ class ViewController: FormViewController { $0.countryPlaceholder = "Country" $0.postalCodePlaceholder = "Zip code" } - +++ Section() - <<< MyPostalAddressRow() { - $0.streetPlaceholder = "Street" - $0.cityPlaceholder = "City" - $0.postalCodePlaceholder = "Zip code" - }.cellSetup({ (cell, row) in - cell.streetTextField?.font = .systemFont(ofSize: 18) - cell.postalCodeTextField?.font = .systemFont(ofSize: 18) - cell.cityTextField?.font = .systemFont(ofSize: 18) - }) + + +++ Section() + <<< PostalAddressRow() { + $0.streetPlaceholder = "Street" + $0.statePlaceholder = "State" + $0.cityPlaceholder = "City" + $0.countryPlaceholder = "Country" + $0.postalCodePlaceholder = "Zip code" + + $0.countrySelectorRow = PushRow(){ + $0.options = ["GB","US"] + $0.displayValueFor = { guard let isoCode = $0 else{ return nil } + return Locale.current.localizedString(forRegionCode: isoCode) + } + } + } + + +++ Section() + <<< MyPostalAddressRow() { + $0.streetPlaceholder = "Street" + $0.cityPlaceholder = "City" + $0.postalCodePlaceholder = "Zip code" + }.cellSetup({ (cell, row) in + cell.streetTextField?.font = .systemFont(ofSize: 18) + cell.postalCodeTextField?.font = .systemFont(ofSize: 18) + cell.cityTextField?.font = .systemFont(ofSize: 18) + }) } } diff --git a/Sources/PostalAddressCell.swift b/Sources/PostalAddressCell.swift index 00336ce..ef8a11a 100644 --- a/Sources/PostalAddressCell.swift +++ b/Sources/PostalAddressCell.swift @@ -20,10 +20,11 @@ public protocol PostalAddressCellConformance { var postalCodeTextField: UITextField? { get } var cityTextField: UITextField? { get } var countryTextField: UITextField? { get } + var countrySelectorTableView: UITableView?{ get } } /// Base class that implements the cell logic for the PostalAddressRow -open class _PostalAddressCell: Cell, CellType, PostalAddressCellConformance, UITextFieldDelegate { +open class _PostalAddressCell: Cell, CellType, PostalAddressCellConformance, UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource { @IBOutlet open var streetTextField: UITextField? @IBOutlet open var firstSeparatorView: UIView? @@ -32,10 +33,14 @@ open class _PostalAddressCell: Cell, CellType, PostalAd @IBOutlet open var cityTextField: UITextField? @IBOutlet open var secondSeparatorView: UIView? @IBOutlet open var countryTextField: UITextField? - + @IBOutlet open var countrySelectorTableView: UITableView? + @IBOutlet weak var postalPercentageConstraint: NSLayoutConstraint? - + open var textFieldOrdering: [UITextField?] = [] + var textFieldOrderingVisible: [UITextField?]{ + return textFieldOrdering.filter{ $0?.isHidden == false } + } public required init(style: UITableViewCellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) @@ -61,6 +66,8 @@ open class _PostalAddressCell: Cell, CellType, PostalAd cityTextField?.removeTarget(self, action: nil, for: .allEvents) countryTextField?.delegate = nil countryTextField?.removeTarget(self, action: nil, for: .allEvents) + countrySelectorTableView?.delegate = nil + countrySelectorTableView?.dataSource = nil imageView?.removeObserver(self, forKeyPath: "image") } @@ -80,6 +87,48 @@ open class _PostalAddressCell: Cell, CellType, PostalAd textField?.delegate = self textField?.font = .preferredFont(forTextStyle: UIFontTextStyle.body) } + + if (row as? PostalAddressRowConformance)?.countrySelectorRow == nil{ + countrySelectorTableView?.isHidden = true + countryTextField?.isHidden = false + } else { + countrySelectorTableView?.isHidden = false + countryTextField?.isHidden = true + } + + countrySelectorTableView?.isScrollEnabled = false + countrySelectorTableView?.sectionHeaderHeight = 0.0 + countrySelectorTableView?.sectionFooterHeight = 0.0 + countrySelectorTableView?.delegate = self + countrySelectorTableView?.dataSource = self + + if let rowConformance = row as? PostalAddressRowConformance, let selectorRow = rowConformance.countrySelectorRow{ + selectorRow + .onChange{ [weak self] in + guard let this = self else{ return } + + if this.row.baseValue == nil{ + this.row.baseValue = PostalAddress() + } + + this.row.value?.country = $0.value + $0.title = $0.displayValueFor?($0.value) ?? $0.noValueDisplayText ?? (this.row as? PostalAddressRowConformance)?.countryPlaceholder + + this.row.updateCell() + + }.cellSetup{ [weak self] cell, row in + cell.selectionStyle = .none + cell.detailTextLabel?.isHidden = true + cell.textLabel?.textColor = self?.row.value?.country == nil ? .lightGray : (self?.row.isDisabled == true ? .gray : .black) + + }.cellUpdate{ [weak self] cell, row in + cell.selectionStyle = .none + cell.textLabel?.textColor = self?.row.value?.country == nil ? .lightGray : (self?.row.isDisabled == true ? .gray : .black) + } + + selectorRow.baseCell.setup() + } + for separator in [firstSeparatorView, secondSeparatorView] { separator?.backgroundColor = .gray @@ -118,6 +167,9 @@ open class _PostalAddressCell: Cell, CellType, PostalAd setPlaceholderToTextField(textField: postalCodeTextField, placeholder: rowConformance.postalCodePlaceholder) setPlaceholderToTextField(textField: cityTextField, placeholder: rowConformance.cityPlaceholder) setPlaceholderToTextField(textField: countryTextField, placeholder: rowConformance.countryPlaceholder) + + rowConformance.countrySelectorRow?.title = rowConformance.countrySelectorRow?.title ?? rowConformance.countryPlaceholder + rowConformance.countrySelectorRow?.selectorTitle = rowConformance.countrySelectorRow?.selectorTitle ?? rowConformance.countryPlaceholder } } @@ -137,12 +189,13 @@ open class _PostalAddressCell: Cell, CellType, PostalAd stateTextField?.canBecomeFirstResponder == true || postalCodeTextField?.canBecomeFirstResponder == true || cityTextField?.canBecomeFirstResponder == true || - countryTextField?.canBecomeFirstResponder == true + countryTextField?.canBecomeFirstResponder == true || + (row as? PostalAddressRowConformance)?.countrySelectorRow?.cell?.cellCanBecomeFirstResponder() == true ) } open override func cellBecomeFirstResponder(withDirection direction: Direction) -> Bool { - return direction == .down ? textFieldOrdering.first??.becomeFirstResponder() ?? false : textFieldOrdering.last??.becomeFirstResponder() ?? false + return direction == .down ? textFieldOrderingVisible.first??.becomeFirstResponder() ?? false : textFieldOrderingVisible.last??.becomeFirstResponder() ?? false } open override func cellResignFirstResponder() -> Bool { @@ -152,11 +205,12 @@ open class _PostalAddressCell: Cell, CellType, PostalAd && stateTextField?.resignFirstResponder() ?? true && cityTextField?.resignFirstResponder() ?? true && countryTextField?.resignFirstResponder() ?? true + && (row as? PostalAddressRowConformance)?.countrySelectorRow?.cell?.cellResignFirstResponder() ?? true } override open var inputAccessoryView: UIView? { if let v = formViewController()?.inputAccessoryView(for: row) as? NavigationAccessoryView { - guard let first = textFieldOrdering.first, let last = textFieldOrdering.last, first != last else { return v } + guard let first = textFieldOrderingVisible.first, let last = textFieldOrderingVisible.last, first != last else { return v } if first?.isFirstResponder == true { v.nextButton.isEnabled = true @@ -185,9 +239,9 @@ open class _PostalAddressCell: Cell, CellType, PostalAd guard let inputAccesoryView = inputAccessoryView as? NavigationAccessoryView else { return } var index = 0 - for field in textFieldOrdering { + for field in textFieldOrderingVisible { if field?.isFirstResponder == true { - let _ = sender == inputAccesoryView.previousButton ? textFieldOrdering[index-1]?.becomeFirstResponder() : textFieldOrdering[index+1]?.becomeFirstResponder() + let _ = sender == inputAccesoryView.previousButton ? textFieldOrderingVisible[index-1]?.becomeFirstResponder() : textFieldOrderingVisible[index+1]?.becomeFirstResponder() break } index += 1 @@ -358,6 +412,44 @@ open class _PostalAddressCell: Cell, CellType, PostalAd open func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { return formViewController()?.textInputShouldEndEditing(textField, cell: self) ?? true } + + //MARK: UITableViewDataSource + + public func numberOfSections(in tableView: UITableView) -> Int { + guard let rowConformance = row as? PostalAddressRowConformance else{ return 0 } + return rowConformance.countrySelectorRow == nil ? 0 : 1 + } + + public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + guard let rowConformance = row as? PostalAddressRowConformance else{ return 0 } + return rowConformance.countrySelectorRow == nil ? 0 : 1 + } + + //MARK: UITableViewDelegate + + public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + guard let row = (row as? PostalAddressRowConformance)?.countrySelectorRow else{ fatalError() } + return row.baseCell + } + + public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + guard let row = (row as? PostalAddressRowConformance)?.countrySelectorRow else{ return } + + // row.baseCell.cellBecomeFirstResponder() may be cause InlineRow collapsed then section count will be changed. Use orignal indexPath will out of section's bounds. + if !row.baseCell.cellCanBecomeFirstResponder() || !row.baseCell.cellBecomeFirstResponder() { + tableView.endEditing(true) + } + row.didSelect() + } + + public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + guard let row = (row as? PostalAddressRowConformance)?.countrySelectorRow else{ return tableView.rowHeight } + return row.baseCell.height?() ?? tableView.rowHeight + } + + public func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + return false + } } diff --git a/Sources/PostalAddressCell.xib b/Sources/PostalAddressCell.xib index 55fdc95..34e0684 100644 --- a/Sources/PostalAddressCell.xib +++ b/Sources/PostalAddressCell.xib @@ -1,8 +1,11 @@ - - + + + + + - + @@ -14,48 +17,60 @@ - + + + + + + + + + + + + + @@ -72,21 +87,26 @@ + + + + + - + diff --git a/Sources/PostalAddressRow.swift b/Sources/PostalAddressRow.swift index 8d92351..6cbf23c 100644 --- a/Sources/PostalAddressRow.swift +++ b/Sources/PostalAddressRow.swift @@ -70,11 +70,20 @@ public protocol PostalAddressRowConformance: PostalAddressFormatterConformance { var postalCodePlaceholder : String? { get set } var cityPlaceholder : String? { get set } var countryPlaceholder : String? { get set } + var countrySelectorRow : PushRow?{ get set } } //MARK: PostalAddressRow open class _PostalAddressRow: Row, PostalAddressRowConformance, KeyboardReturnHandler where Cell: BaseCell, Cell: PostalAddressCellConformance { + + open override var section: Section?{ + get{ return super.section } + set{ + countrySelectorRow?.section = newValue + super.section = newValue + } + } /// Configuration for the keyboardReturnType of this row open var keyboardReturnType : KeyboardReturnTypeConfiguration? @@ -129,6 +138,9 @@ open class _PostalAddressRow: Row, PostalAddressRowConform /// If the formatter should be used while the user is editing the country. open var countryUseFormatterDuringInput: Bool + + /// the country selector row + open var countrySelectorRow: PushRow? public required init(tag: String?) { streetUseFormatterDuringInput = false @@ -139,6 +151,11 @@ open class _PostalAddressRow: Row, PostalAddressRowConform super.init(tag: tag) } + + open override func updateCell(){ + super.updateCell() + countrySelectorRow?.updateCell() + } } /// A PostalAddress valued row where the user can enter a postal address. From 9fb48a086a7f4d93234319954e934d48e52627d9 Mon Sep 17 00:00:00 2001 From: Marco Betschart Date: Mon, 11 Dec 2017 19:43:16 +0100 Subject: [PATCH 2/5] Added initializer requirement to PostalAddressType This allows us to initialize an empty object of the PostalAddressType used - instead of the non-generic implementation. We also made sure the onChange event is only fired once - and not multiple times (this was the case if the PostalAddress value was not initialized before). --- Sources/PostalAddressCell.swift | 47 ++++++++++++++++++--------------- Sources/PostalAddressCell.xib | 31 +++++++++++----------- Sources/PostalAddressRow.swift | 2 ++ 3 files changed, 42 insertions(+), 38 deletions(-) diff --git a/Sources/PostalAddressCell.swift b/Sources/PostalAddressCell.swift index ef8a11a..8345154 100644 --- a/Sources/PostalAddressCell.swift +++ b/Sources/PostalAddressCell.swift @@ -107,11 +107,10 @@ open class _PostalAddressCell: Cell, CellType, PostalAd .onChange{ [weak self] in guard let this = self else{ return } - if this.row.baseValue == nil{ - this.row.baseValue = PostalAddress() - } + var rowValue = this.row.value ?? T() + rowValue.country = $0.value + this.row.value = rowValue - this.row.value?.country = $0.value $0.title = $0.displayValueFor?($0.value) ?? $0.noValueDisplayText ?? (this.row as? PostalAddressRowConformance)?.countryPlaceholder this.row.updateCell() @@ -119,11 +118,14 @@ open class _PostalAddressCell: Cell, CellType, PostalAd }.cellSetup{ [weak self] cell, row in cell.selectionStyle = .none cell.detailTextLabel?.isHidden = true - cell.textLabel?.textColor = self?.row.value?.country == nil ? .lightGray : (self?.row.isDisabled == true ? .gray : .black) + cell.textLabel?.textColor = self?.row.value?.country == nil ? UIColor(red: 196.0/255.0, green: 196.0/255.0, blue: 196.0/255.0, alpha: 1.0) : (self?.row.isDisabled == true ? .gray : .black) }.cellUpdate{ [weak self] cell, row in cell.selectionStyle = .none - cell.textLabel?.textColor = self?.row.value?.country == nil ? .lightGray : (self?.row.isDisabled == true ? .gray : .black) + cell.textLabel?.textColor = self?.row.value?.country == nil ? UIColor(red: 196.0/255.0, green: 196.0/255.0, blue: 196.0/255.0, alpha: 1.0) : (self?.row.isDisabled == true ? .gray : .black) + + }.onPresent{ from, to in + to.sectionKeyForValue = { _ in return selectorRow.selectorTitle ?? "" } } selectorRow.baseCell.setup() @@ -258,11 +260,7 @@ open class _PostalAddressCell: Cell, CellType, PostalAd } @objc open func textFieldDidChange(_ textField : UITextField){ - if row.baseValue == nil{ - row.baseValue = PostalAddress() - } - - guard let textValue = textField.text else { + guard let textValue = textField.text else { switch(textField){ case let field where field == streetTextField: row.value?.street = nil @@ -317,18 +315,19 @@ open class _PostalAddressCell: Cell, CellType, PostalAd let value: AutoreleasingUnsafeMutablePointer = AutoreleasingUnsafeMutablePointer.init(UnsafeMutablePointer.allocate(capacity: 1)) let errorDesc: AutoreleasingUnsafeMutablePointer? = nil if formatter.getObjectValue(value, for: textValue, errorDescription: errorDesc) { + var rowValue = row.value ?? T() switch(textField){ case let field where field == streetTextField: - row.value?.street = value.pointee as? String + rowValue.street = value.pointee as? String case let field where field == stateTextField: - row.value?.state = value.pointee as? String + rowValue.state = value.pointee as? String case let field where field == postalCodeTextField: - row.value?.postalCode = value.pointee as? String + rowValue.postalCode = value.pointee as? String case let field where field == cityTextField: - row.value?.city = value.pointee as? String + rowValue.city = value.pointee as? String case let field where field == countryTextField: - row.value?.country = value.pointee as? String + rowValue.country = value.pointee as? String default: break } @@ -341,6 +340,8 @@ open class _PostalAddressCell: Cell, CellType, PostalAd } textField.selectedTextRange = textField.textRange(from: selStartPos, to: selStartPos) } + + row.value = rowValue return } } @@ -363,21 +364,23 @@ open class _PostalAddressCell: Cell, CellType, PostalAd } return } - + + var rowValue = row.value ?? T() switch(textField){ case let field where field == streetTextField: - row.value?.street = textValue + rowValue.street = textValue case let field where field == stateTextField: - row.value?.state = textValue + rowValue.state = textValue case let field where field == postalCodeTextField: - row.value?.postalCode = textValue + rowValue.postalCode = textValue case let field where field == cityTextField: - row.value?.city = textValue + rowValue.city = textValue case let field where field == countryTextField: - row.value?.country = textValue + rowValue.country = textValue default: break } + row.value = rowValue } //MARK: TextFieldDelegate diff --git a/Sources/PostalAddressCell.xib b/Sources/PostalAddressCell.xib index 34e0684..92b70a8 100644 --- a/Sources/PostalAddressCell.xib +++ b/Sources/PostalAddressCell.xib @@ -21,87 +21,86 @@ - + - + - + - + - + - + - + - + - - + - - + + - + - + - + - + diff --git a/Sources/PostalAddressRow.swift b/Sources/PostalAddressRow.swift index 6cbf23c..98e40af 100644 --- a/Sources/PostalAddressRow.swift +++ b/Sources/PostalAddressRow.swift @@ -20,6 +20,8 @@ public protocol PostalAddressType: Equatable { var postalCode: String? { get set } var city: String? { get set } var country: String? { get set } + + init() } public func == (lhs: T, rhs: T) -> Bool { From c95481bd3ec03a970d3ce7e424ba37fc96540309 Mon Sep 17 00:00:00 2001 From: Marco Betschart Date: Mon, 11 Dec 2017 20:13:54 +0100 Subject: [PATCH 3/5] Initialize selectorRow with country value --- Sources/PostalAddressCell.swift | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Sources/PostalAddressCell.swift b/Sources/PostalAddressCell.swift index 8345154..539ddf5 100644 --- a/Sources/PostalAddressCell.swift +++ b/Sources/PostalAddressCell.swift @@ -123,9 +123,6 @@ open class _PostalAddressCell: Cell, CellType, PostalAd }.cellUpdate{ [weak self] cell, row in cell.selectionStyle = .none cell.textLabel?.textColor = self?.row.value?.country == nil ? UIColor(red: 196.0/255.0, green: 196.0/255.0, blue: 196.0/255.0, alpha: 1.0) : (self?.row.isDisabled == true ? .gray : .black) - - }.onPresent{ from, to in - to.sectionKeyForValue = { _ in return selectorRow.selectorTitle ?? "" } } selectorRow.baseCell.setup() @@ -164,7 +161,7 @@ open class _PostalAddressCell: Cell, CellType, PostalAd countryTextField?.keyboardType = .asciiCapable if let rowConformance = row as? PostalAddressRowConformance { - setPlaceholderToTextField(textField: streetTextField, placeholder: rowConformance.streetPlaceholder) + setPlaceholderToTextField(textField: streetTextField, placeholder: rowConformance.streetPlaceholder) setPlaceholderToTextField(textField: stateTextField, placeholder: rowConformance.statePlaceholder) setPlaceholderToTextField(textField: postalCodeTextField, placeholder: rowConformance.postalCodePlaceholder) setPlaceholderToTextField(textField: cityTextField, placeholder: rowConformance.cityPlaceholder) @@ -172,6 +169,7 @@ open class _PostalAddressCell: Cell, CellType, PostalAd rowConformance.countrySelectorRow?.title = rowConformance.countrySelectorRow?.title ?? rowConformance.countryPlaceholder rowConformance.countrySelectorRow?.selectorTitle = rowConformance.countrySelectorRow?.selectorTitle ?? rowConformance.countryPlaceholder + rowConformance.countrySelectorRow?.value = row.value?.country } } From 3db1dcefd2a38cc43f433c23ec757766aad13842 Mon Sep 17 00:00:00 2001 From: Marco Betschart Date: Sun, 17 Dec 2017 21:06:48 +0100 Subject: [PATCH 4/5] Fixed rendering issues with initial value Because the onChange event of the PushRow was not fired, the child cell was never reloaded and therefore displayed a wrong state. --- Sources/PostalAddressRow.swift | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/Sources/PostalAddressRow.swift b/Sources/PostalAddressRow.swift index 98e40af..fca973d 100644 --- a/Sources/PostalAddressRow.swift +++ b/Sources/PostalAddressRow.swift @@ -80,10 +80,13 @@ public protocol PostalAddressRowConformance: PostalAddressFormatterConformance { open class _PostalAddressRow: Row, PostalAddressRowConformance, KeyboardReturnHandler where Cell: BaseCell, Cell: PostalAddressCellConformance { open override var section: Section?{ - get{ return super.section } - set{ - countrySelectorRow?.section = newValue - super.section = newValue + didSet{ + guard let section = section, let row = countrySelectorRow else { return } + let rowValue = row.value + row.value = nil + + row.section = section + row.value = rowValue //triggers the onChange event } } @@ -162,6 +165,15 @@ open class _PostalAddressRow: Row, PostalAddressRowConform /// A PostalAddress valued row where the user can enter a postal address. public final class PostalAddressRow: _PostalAddressRow, RowType { + + open override var value: Cell.Value?{ + get{ return super.value } + set{ + self.countrySelectorRow?.value = newValue?.country + super.value = newValue + } + } + public required init(tag: String? = nil) { super.init(tag: tag) // load correct bundle for cell nib file From fc0934b95c6188d300cff529d90cf551f4afe0c0 Mon Sep 17 00:00:00 2001 From: Marco Betschart Date: Fri, 5 Jan 2018 19:08:42 +0100 Subject: [PATCH 5/5] Set dependency to Eureka/master Still waiting for a new tagged release though --- Cartfile | 3 +-- Cartfile.resolved | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Cartfile b/Cartfile index 48a5194..0cf3d24 100644 --- a/Cartfile +++ b/Cartfile @@ -1,2 +1 @@ -#github "xmartlabs/Eureka" ~> 4.0 -github "Mandelkind/Eureka" "SplitRow" +github "xmartlabs/Eureka" "master" diff --git a/Cartfile.resolved b/Cartfile.resolved index f37dc4e..e8dcbc9 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1 +1 @@ -github "Mandelkind/Eureka" "be4c01d20b1bcfcaf990baae092d75ff2bfe07b2" +github "xmartlabs/Eureka" "a9552a715293c4fc70e26177533461b0e8e7b572"