diff --git a/Podfile b/Podfile index 8dff200eb..a7bcda75a 100644 --- a/Podfile +++ b/Podfile @@ -77,7 +77,6 @@ target 'Signal' do pod 'FeedKit', '~> 8.1', :inhibit_warnings => true pod 'CryptoSwift', '~> 1.3', :inhibit_warnings => true pod 'NVActivityIndicatorView', '~> 4.7', :inhibit_warnings => true - pod 'UITextView+Placeholder', '~> 1.4', :inhibit_warnings => true target 'SignalTests' do inherit! :search_paths diff --git a/Podfile.lock b/Podfile.lock index 93ee57575..acfaf69b2 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -130,7 +130,6 @@ PODS: - SSZipArchive (2.2.3) - Starscream (3.0.6) - SwiftProtobuf (1.5.0) - - "UITextView+Placeholder (1.4.0)" - YapDatabase/SQLCipher (3.1.1): - YapDatabase/SQLCipher/Core (= 3.1.1) - YapDatabase/SQLCipher/Extensions (= 3.1.1) @@ -223,7 +222,6 @@ DEPENDENCIES: - SQLCipher (>= 4.0.1) - SSZipArchive - Starscream (from `https://github.com/signalapp/Starscream.git`, branch `signal-release`) - - "UITextView+Placeholder (~> 1.4)" - YapDatabase/SQLCipher (from `https://github.com/signalapp/YapDatabase.git`, branch `signal-release`) - YYImage @@ -243,7 +241,6 @@ SPEC REPOS: - SQLCipher - SSZipArchive - SwiftProtobuf - - "UITextView+Placeholder" - YYImage EXTERNAL SOURCES: @@ -325,10 +322,9 @@ SPEC CHECKSUMS: SSZipArchive: 62d4947b08730e4cda640473b0066d209ff033c9 Starscream: 8aaf1a7feb805c816d0e7d3190ef23856f6665b9 SwiftProtobuf: 241400280f912735c1e1b9fe675fdd2c6c4d42e2 - "UITextView+Placeholder": d7b0c400921f66523f3a85d74f774512e14f6502 YapDatabase: b418a4baa6906e8028748938f9159807fd039af4 YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54 -PODFILE CHECKSUM: 0d59a208ed95a7e5640a3e89cff48cd0a5b51e0b +PODFILE CHECKSUM: b4f88816a817cc27f499940c644c0449ef5d7cc7 COCOAPODS: 1.9.3 diff --git a/Pods b/Pods index 5d61962cd..71f54b041 160000 --- a/Pods +++ b/Pods @@ -1 +1 @@ -Subproject commit 5d61962cd5848660e72017012f20caab92289f48 +Subproject commit 71f54b041ff9b9a77fecea805aa42ac536392c40 diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index 46a79e7f9..da9f451ce 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -3417,7 +3417,6 @@ "${BUILT_PRODUCTS_DIR}/SessionServiceKit/SessionServiceKit.framework", "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework", "${BUILT_PRODUCTS_DIR}/SwiftProtobuf/SwiftProtobuf.framework", - "${BUILT_PRODUCTS_DIR}/UITextView+Placeholder/UITextView_Placeholder.framework", "${BUILT_PRODUCTS_DIR}/YYImage/YYImage.framework", "${BUILT_PRODUCTS_DIR}/YapDatabase/YapDatabase.framework", "${BUILT_PRODUCTS_DIR}/libPhoneNumber-iOS/libPhoneNumber_iOS.framework", @@ -3446,7 +3445,6 @@ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SessionServiceKit.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Starscream.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftProtobuf.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/UITextView_Placeholder.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YYImage.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YapDatabase.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libPhoneNumber_iOS.framework", diff --git a/Signal/src/Loki/Components/TextView.swift b/Signal/src/Loki/Components/TextView.swift index 5b9ec7902..e7bd08bfb 100644 --- a/Signal/src/Loki/Components/TextView.swift +++ b/Signal/src/Loki/Components/TextView.swift @@ -1,20 +1,28 @@ -import UITextView_Placeholder -final class TextView : UITextView { +final class TextView : UITextView, UITextViewDelegate { private let usesDefaultHeight: Bool private let height: CGFloat private let horizontalInset: CGFloat private let verticalInset: CGFloat + private let placeholder: String override var contentSize: CGSize { didSet { centerTextVertically() } } + private lazy var placeholderLabel: UILabel = { + let result = UILabel() + result.font = .systemFont(ofSize: Values.smallFontSize) + result.textColor = Colors.text.withAlphaComponent(Values.unimportantElementOpacity) + return result + }() + init(placeholder: String, usesDefaultHeight: Bool = true, customHeight: CGFloat? = nil, customHorizontalInset: CGFloat? = nil, customVerticalInset: CGFloat? = nil) { self.usesDefaultHeight = usesDefaultHeight self.height = customHeight ?? Values.textFieldHeight self.horizontalInset = customHorizontalInset ?? (isIPhone5OrSmaller ? Values.mediumSpacing : Values.largeSpacing) self.verticalInset = customVerticalInset ?? (isIPhone5OrSmaller ? Values.smallSpacing : Values.largeSpacing) - super.init(frame: CGRect.zero, textContainer: nil) self.placeholder = placeholder + super.init(frame: CGRect.zero, textContainer: nil) + self.delegate = self setUpStyle() } @@ -29,12 +37,7 @@ final class TextView : UITextView { private func setUpStyle() { showsHorizontalScrollIndicator = false showsVerticalScrollIndicator = false - let placeholder = NSMutableAttributedString(string: self.placeholder!) - self.placeholder = nil - let placeholderColor = Colors.text.withAlphaComponent(Values.unimportantElementOpacity) - placeholder.addAttribute(.foregroundColor, value: placeholderColor, range: NSRange(location: 0, length: placeholder.length)) - placeholder.addAttribute(.font, value: UIFont.systemFont(ofSize: Values.smallFontSize), range: NSRange(location: 0, length: placeholder.length)) - attributedPlaceholder = placeholder + placeholderLabel.text = placeholder backgroundColor = .clear textColor = Colors.text font = .systemFont(ofSize: Values.smallFontSize) @@ -48,6 +51,15 @@ final class TextView : UITextView { layer.cornerRadius = Values.textFieldCornerRadius let horizontalInset = usesDefaultHeight ? self.horizontalInset : Values.mediumSpacing textContainerInset = UIEdgeInsets(top: 0, leading: horizontalInset, bottom: 0, trailing: horizontalInset) + addSubview(placeholderLabel) + placeholderLabel.pin(.leading, to: .leading, of: self, withInset: horizontalInset + 3) // Slight visual adjustment + placeholderLabel.pin(.top, to: .top, of: self) + pin(.trailing, to: .trailing, of: placeholderLabel, withInset: horizontalInset) + pin(.bottom, to: .bottom, of: placeholderLabel) + } + + func textViewDidChange(_ textView: UITextView) { + placeholderLabel.isHidden = !text.isEmpty } private func centerTextVertically() {