Wie kann ich einen Platzhalter in einem UITextView
hinzufügen, ähnlich wie bei UITextField
, in Swift
?
Antworten
Zu viele Anzeigen?
Sai kumar Reddy
Punkte
1555
import UIKit
import SnapKit
class PlaceholderTextView: UITextView {
// MARK: - Eigenschaften
private let placeholderLabel: UILabel = {
let label = UILabel()
label.textColor = UIColor.lightGray
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
var placeholder: String? = "Hier Nachricht eingeben..." {
didSet {
placeholderLabel.text = placeholder
}
}
override var font: UIFont? {
didSet {
placeholderLabel.font = font
}
}
override var text: String! {
didSet {
placeholderLabel.isHidden = !text.isEmpty
}
}
// MARK: - Initialisierer
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
override init(frame: CGRect, textContainer: NSTextContainer?) {
super.init(frame: frame, textContainer: textContainer)
commonInit()
}
private func commonInit() {
addSubview(placeholderLabel)
placeholderLabel.translatesAutoresizingMaskIntoConstraints = false
placeholderLabel.snp.makeConstraints { make in
make.edges.equalToSuperview().inset(8)
}
placeholderLabel.text = placeholder
placeholderLabel.isHidden = !text.isEmpty
placeholderLabel.sizeToFit()
NotificationCenter.default.addObserver(self, selector: #selector(textDidChange), name: UITextView.textDidChangeNotification, object: nil)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
// MARK: - Aktionen
@objc private func textDidChange() {
placeholderLabel.isHidden = !text.isEmpty
}
}
Feta
Punkte
522
Ich weiß, dass dies eine alte Frage ist, aber ich wollte teilen, was ich für eine nützliche Möglichkeit halte, UITextView zu erweitern, um placeholderText- und placeholderColor-Felder zu haben. Grundsätzlich gießen Sie das UITextView in ein UITextField und setzen dann das attributedPlaceholder-Feld. PlaceholderText und placeholderColor sind IBInspectable-Felder, sodass ihre Werte in IB festgelegt werden können und sich genau wie die UITextField-Platzhalterfunktionalität verhalten.
UITextView+Extend.h
#import
@interface UITextView (Extend)
@property (nonatomic) IBInspectable NSString *placeholderText;
@property (nonatomic) IBInspectable UIColor *placeholderColor;
@end
UITextView+Extend.m
#import "UITextView+Extend.h"
#import "objc/runtime.h"
@implementation UITextView (Extend)
- (void)setPlaceholderText:(NSString *)placeholderText
{
objc_setAssociatedObject(self, @selector(placeholderText), placeholderText, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[self updatePlaceholderText];
}
- (NSString*)placeholderText
{
return objc_getAssociatedObject(self, @selector(placeholderText));
}
- (void)setPlaceholderColor:(UIColor *)placeholderColor
{
objc_setAssociatedObject(self, @selector(placeholderColor), placeholderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[self updatePlaceholderText];
}
- (UIColor*)placeholderColor
{
return objc_getAssociatedObject(self, @selector(placeholderColor));
}
- (void)updatePlaceholderText
{
NSString *text = self.placeholderText;
UIColor *color = self.placeholderColor;
if(text && color)
{
UITextField *textField = (UITextField*)self;
textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:text attributes:@{NSForegroundColorAttributeName:color}];
}
}
@end
- See previous answers
- Weitere Antworten anzeigen