আমি জানি যে এর উত্তর ইতিমধ্যে অনেক আছে, কিন্তু আমি সত্যিই তাদের কোনওটিই কমপক্ষে (কমপক্ষে সুইফটে) পাইনি। আমি এমন একটি সমাধান চেয়েছিলাম যা ইউআইটিেক্সটফিল্ডের মতো একই সঠিক সীমানা সরবরাহ করেছিল (এটি এখন দেখতে দেখতে প্রায় সেরকম মনে হচ্ছে এমন একটি আনুমানিক নয়, তবে এটির মতো দেখতে এবং সর্বদা এটির মতো দেখতে হবে)। ব্যাকগ্রাউন্ডের জন্য ইউআইটিেক্সটভিউকে ব্যাক করতে আমার একটি ইউআইটিএক্সেক্সট ফিল্ড ব্যবহার করা দরকার, তবে প্রতিবারই আলাদা করে তৈরি করতে চাইনি।
নীচের সমাধানটি একটি ইউআইটিেক্সটভিউ যা সীমান্তের জন্য এটির নিজস্ব ইউআইটিেক্সটফিল্ড সরবরাহ করে। এটি আমার সম্পূর্ণ সমাধানের ছাঁটা ডাউন সংস্করণ (যা একইভাবে ইউআইটিেক্সটভিউতে "স্থানধারক" সমর্থন যোগ করে) এবং এখানে পোস্ট করা হয়েছিল: 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
?