65 lines
2.5 KiB
Swift
65 lines
2.5 KiB
Swift
// SPDX-License-Identifier: MIT
|
|
// Copyright © 2018-2019 WireGuard LLC. All Rights Reserved.
|
|
|
|
import UIKit
|
|
|
|
class EditableTextCell: UITableViewCell {
|
|
var message: String {
|
|
get { return valueTextField.text ?? "" }
|
|
set(value) { valueTextField.text = value }
|
|
}
|
|
|
|
let valueTextField: UITextField = {
|
|
let valueTextField = UITextField()
|
|
valueTextField.textAlignment = .left
|
|
valueTextField.isEnabled = true
|
|
valueTextField.font = UIFont.preferredFont(forTextStyle: .body)
|
|
valueTextField.adjustsFontForContentSizeCategory = true
|
|
valueTextField.autocapitalizationType = .none
|
|
valueTextField.autocorrectionType = .no
|
|
valueTextField.spellCheckingType = .no
|
|
return valueTextField
|
|
}()
|
|
|
|
var onValueBeingEdited: ((String) -> Void)?
|
|
|
|
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
|
super.init(style: style, reuseIdentifier: reuseIdentifier)
|
|
|
|
valueTextField.delegate = self
|
|
contentView.addSubview(valueTextField)
|
|
valueTextField.translatesAutoresizingMaskIntoConstraints = false
|
|
let bottomAnchorConstraint = contentView.layoutMarginsGuide.bottomAnchor.constraint(equalToSystemSpacingBelow: valueTextField.bottomAnchor, multiplier: 1)
|
|
bottomAnchorConstraint.priority = .defaultLow
|
|
NSLayoutConstraint.activate([
|
|
valueTextField.leadingAnchor.constraint(equalToSystemSpacingAfter: contentView.layoutMarginsGuide.leadingAnchor, multiplier: 1),
|
|
contentView.layoutMarginsGuide.trailingAnchor.constraint(equalToSystemSpacingAfter: valueTextField.trailingAnchor, multiplier: 1),
|
|
valueTextField.topAnchor.constraint(equalToSystemSpacingBelow: contentView.layoutMarginsGuide.topAnchor, multiplier: 1),
|
|
bottomAnchorConstraint
|
|
])
|
|
}
|
|
|
|
required init?(coder aDecoder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
func beginEditing() {
|
|
valueTextField.becomeFirstResponder()
|
|
}
|
|
|
|
override func prepareForReuse() {
|
|
super.prepareForReuse()
|
|
message = ""
|
|
}
|
|
}
|
|
|
|
extension EditableTextCell: UITextFieldDelegate {
|
|
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
|
if let onValueBeingEdited = onValueBeingEdited {
|
|
let modifiedText = ((textField.text ?? "") as NSString).replacingCharacters(in: range, with: string)
|
|
onValueBeingEdited(modifiedText)
|
|
}
|
|
return true
|
|
}
|
|
}
|