ฉันรู้ว่ามีคำตอบมากมายอยู่แล้วสำหรับเรื่องนี้ แต่ฉันไม่พบพวกเขาเพียงพอ (อย่างน้อยก็ใน Swift) ฉันต้องการโซลูชันที่ให้เส้นขอบที่แน่นอนเหมือนกับ UITextField (ไม่ใช่อันใกล้เคียงที่ดูเหมือนตอนนี้ แต่ตอนที่ดูเหมือนว่ามันจะเหมือนกันเสมอ) ฉันต้องใช้ UITextField เพื่อสำรอง UITextView สำหรับพื้นหลัง แต่ไม่ต้องการสร้างแยกต่างหากทุกครั้ง
วิธีการแก้ปัญหาด้านล่างคือ UITextView ที่เป็นของ UITextField สำหรับชายแดน นี่เป็นเวอร์ชันเต็มของโซลูชันของฉัน (ซึ่งเพิ่มการสนับสนุน "ตัวยึด" ลงใน UITextView ในลักษณะที่คล้ายกัน) และถูกโพสต์ที่นี่: 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
และปิดได้userInteractionEnabled
ไหม