Fajar menjelang pagi  🌔
Udara yang begitu segar menyapaku dari cendela yang sengaja aku buka semalaman, suara kicauan burung melengkapi indahnya sang cangrawala hasil lukisan tuhan 😙. Syukuri dan nikmati setiap detik yang begitu berharga yang telah tuhan berikan kepada kita. Selalu mencoba memaafkan diri sendiri atas segala hilaf yang dilakukan di hari kemarin dan jangan lupa memaafkan siapa saja atas apa saja pada hari kemarin, agar segala apa yang tercatat dalam buku kehidupan kita menjadi baik tanpa goresan merah didalamnya 😊. Jangan lupa belajar efisien terhadap apa yang dilakukan dan apa yang difikirkan mungkin itulah sebagian kecil dari bagaiman kita menghargai kehidupan 😊.

Ngomong - ngomong tentang efisien, jadi teringat akan dua inputan dalam swift 4 yaitu UITextField  dan UITextView. Bukankah itu sama saja, keduanya digunakan sebagai media inputan dalam membangun aplikasi IOS. Tidak sesimple itu sobat 😅, ternyata keduanya memiliki fungsi dan keunggulan masing - masing walaupun sejatinya mereka digunakan sebagai media inputan 😀. Berikut ini keunggulan sekaligun kegunaan dari keduanya

UITextField : Media inputan dalam Xcode yang kebanyakan digunakan untuk satu baris kalimat.  dan kebanyakan diterapkan untuk inputan yang membutuhkan validation dan berupa sensitif text . seperti Email dan Password. Keunggulan dari Textfiled merupakan inputan yang digunakan untuk sensitif text dan memerlukan validation inputan,  terdapat fitur add placeholder pada Storyboard di Xcode defaultnya tetapi tidak memiliki fiture Scrolling, Editing, dan selector kata.

UITextView : Media inputan dalam Xcode yang kebanyakan digunakan untuk menginputkan lebih dari satu baris kalimat dan biasanya digunakan untuk menuliskan kata yang tidak memerlukan validation atau sensitif text. seperti untuk inputan alamat dan Motto. Keunggulan dari TextView adalah terdapat fiture Scrolling, Editing, dan selector kata, tapi tidak memiliki fitur add Placeholder pada storyboard di Xcode defaultnya.

Untuk UITextView sendiri dalam menambahkan Placeholder memerlukan perlakuan Khusus sebagaimana kita memperlakukan seorang wanita, harus dengan lembut dan baik pula karena ia begitu sensitif dan perasa 😅. Ada dua cara bisa dengan menambahkan extension di class UITextView nya atau menambahkan di class Controllernya. berikut kedua caranya :

  • Menambakan di Class Swift nya :

 setup content di function viewDidLoad()

        fieldContent.text = contentPlaceholder
        fieldContent.textColor = .red
        fieldContent.selectedRange = NSRange(location: 0, length: 0)

function awal yang dijalankan saat inputan pertama di UITextView

 func textViewDidBeginEditing(_ textView: UITextView) {
        if fieldContent.textColor == .red {
            fieldContent.text = nil
            fieldContent.textColor = .black
        }else{
            fieldContent.textColor = .red
       }
   }
  
function yang dijalankan saat akhir dari inputan di UITextView  

  func textViewDidEndEditing(_ textView: UITextView) {
        if fieldContent.text.isEmpty {
            fieldContent.text = contentPlaceholder
            fieldContent.textColor = .black
        }
   }

  • Sedangkan untuk cara yang kedua membuat file Extension :
extension UITextView {
    private class PlaceholderLabel: UILabel { }

    private var placeholderLabel: PlaceholderLabel {
        if let label = subviews.compactMap( { $0 as? PlaceholderLabel }).first {
            return label
        } else {
            let label = PlaceholderLabel(frame: .zero)
            label.font = font
            addSubview(label)
            return label
        }
    }

    @IBInspectable
    var placeholder: String {
        get {
            return subviews.compactMap( { $0 as? PlaceholderLabel }).first?.text ?? ""
        }
        set {
            let placeholderLabel = self.placeholderLabel
            placeholderLabel.text = newValue
            placeholderLabel.numberOfLines = 0
            let width = frame.width - textContainer.lineFragmentPadding * 2
            let size = placeholderLabel.sizeThatFits(CGSize(width: width, height: .greatestFiniteMagnitude))
            placeholderLabel.frame.size.height = size.height
            placeholderLabel.frame.size.width = width
            placeholderLabel.frame.origin = CGPoint(x: textContainer.lineFragmentPadding, y: textContainerInset.top)

            textStorage.delegate = self
        }
    }

}

extension UITextView: NSTextStorageDelegate {
    public func textStorage(_ textStorage: NSTextStorage, didProcessEditing editedMask: NSTextStorageEditActions, range editedRange: NSRange, changeInLength delta: Int) {
        if editedMask.contains(.editedCharacters) {
            placeholderLabel.isHidden = !text.isEmpty
        }
    }
}

Oups .... jangan lupa menambahkan delegate ya di viewDidLoadnya :

textView.textStorage.delegate = self

Thanks .... 😁





















1 Comments

Post a Comment

Previous Post Next Post