Bunun zaten çok fazla cevabı olduğunu biliyorum, ama bunların hiçbirini yeterli bulmadım (en azından Swift'te). Bir UITextField (şu anda göründüğü gibi görünüyor, ama tam olarak öyle görünüyor ve her zaman tam olarak benzeyecek gibi görünüyor yaklaşık bir değil) aynı sınır sağlayan bir çözüm istedim. Arka plan için UITextView yedeklemek için bir UITextField kullanmak gerekiyordu, ama her seferinde ayrı ayrı oluşturmak zorunda değildi.
Aşağıdaki çözüm, kenarlık için kendi UITextField öğesini sağlayan bir UITextView. Bu, tam çözümümün kesilmiş bir versiyonudur (UITextView'e benzer bir şekilde "yer tutucu" desteği ekler) ve buraya gönderildi: https://stackoverflow.com/a/36561236/1227119
// This class implements a UITextView that has a UITextField behind it, where the
// UITextField provides the border.
//
class TextView : UITextView, UITextViewDelegate
{
var textField = TextField();
required init?(coder: NSCoder)
{
fatalError("This class doesn't support NSCoding.")
}
override init(frame: CGRect, textContainer: NSTextContainer?)
{
super.init(frame: frame, textContainer: textContainer);
self.delegate = self;
// Create a background TextField with clear (invisible) text and disabled
self.textField.borderStyle = UITextBorderStyle.RoundedRect;
self.textField.textColor = UIColor.clearColor();
self.textField.userInteractionEnabled = false;
self.addSubview(textField);
self.sendSubviewToBack(textField);
}
convenience init()
{
self.init(frame: CGRectZero, textContainer: nil)
}
override func layoutSubviews()
{
super.layoutSubviews()
// Do not scroll the background textView
self.textField.frame = CGRectMake(0, self.contentOffset.y, self.frame.width, self.frame.height);
}
// UITextViewDelegate - Note: If you replace delegate, your delegate must call this
func scrollViewDidScroll(scrollView: UIScrollView)
{
// Do not scroll the background textView
self.textField.frame = CGRectMake(0, self.contentOffset.y, self.frame.width, self.frame.height);
}
}
UITextField
ve sadece kapatabiliruserInteractionEnabled
misiniz?