IQKeyboardManager Nedir? Kurulumu ve Özelleştirilmesi

Berkay Berkman
NSIstanbul
Published in
3 min readNov 20, 2018

Öncelikle herkese merhaba. Bu benim ilk medium yazım. Dolayısıyla acemiliğimin ve ufak hatalarım varsa farkında olmadan bunları yapmış olabilirim, şimdiden kusura bakmayın ve bana lütfen iletin. :)

Photo by rawpixel on Unsplash

iOS uygulaması geliştirmeyi öğrendiğim süreçte yapmaya çalıştığım uygulamanın bir ekranında klavye UITextField/UITextView’ın üstünde kalıyordu. Bu sorunu aşmayı bilenler için gayet kolay bir sorun fakat bir tanıdığıma sormadan önce benim için dünyanın en büyük sorunuydu ve kesinlikle çözülmeyeceğini düşünmüştüm. Ardından kütüphaneyi keşfetmemle zaten çoğu kişinin bildiği bu kütüphane hakkında Türkçe yazı olmadığını fark ettim. Bu da bu yazının motivasyonunu oluşturdu. Belki benim gibi bu işte yeni olanların, öğrenmeye çalışanları benim gibi omuzlarındaki bu büyük yükü atmalarını sağlarım.

IQKeyboardManager Nedir?

IQKeyboardManager tek satır bile kod yazmanıza gerek kalmadan otomatik olarak çalışan, yukarıda belirttiğim gibi klavye altında UITextField/UITextView’ın kalması gibi sorununu kod yazmadan çözmenizi sağlayacak, özelleştirebildiğiniz mükemmel bir açık kaynak kütüphanesi.

Yapabileceklerinizi gösteren bir gif.

Kurulumu

İlk önce uygulamamızın içinde olduğu klasörde terminal açıp aşağıdaki kodu yazıyoruz.

pod init 

Swift 3.0 ve üstü için (Xcode 9.0) pod dosyanıza şu satırı eklemeniz yeterli.

pod 'IQKeyboardManagerSwift'

Podfile’ı kaydettikten sonra, aşağıdaki .xcode dosyasını açacağız. Bundan sonra bütün işlerimizi bu projeden yapacağız mavi ikonlu .xcode dosyasını unutun.

Açtıktan sonra projeyi bir kere build & run yapıyoruz ardından AppDelegate.swift dosyasından kütüphaneyi “import” ediyoruz.

import IQKeyboardManagerSwift

Ardından didFinishLaunchingWithOptions fonksiyonunun içine aşağıdaki kodu olduğu gibi yapıştırıyoruz.

IQKeyboardManager.sharedManager().enable = true

Şöyle bir görüntü oluşmalı:

Tebrikler! Projeyi çalıştırdığınızda klavye altında UITextField/UITextView’ın kalması gibi bir sorun yaşamayacaksınız.

IQKeyboardManager’ın Özelleştirilmesi

Bundan sonrası yine çok basit ve kolay AppDelegate.swift dosyasında yapacağımız değişikliklerle alakalı.

İlk olarak aşağıdaki toolbar’ı nasıl kaldıracağımızı öğrenelim.

IQKeyboardManager.sharedManager().enableAutoToolbar = false

Projeyi tekrar çalıştırdığınızda toolbar’ın gittiğini göreceksiniz.

Gece modunda çalışan bir uygulama yapıyorsanız IQKeyboardManager’ın size göre bir teması var! Aşağıdaki satırlarla aktif edebilir, diğer temalarla değiştirebilirsiniz.

IQKeyboardManager.sharedManager().overrideKeyboardAppearence = trueIQKeyboardManager.sharedManager().keyboardAppearence = .dark

İsterseniz textField’tan uzaklığını aşağıdaki satırla değiştirebilirsiniz.

IQKeyboardManager.sharedManager().keyboardDistanceFromTextField = 96.0 //uzaklığı istediğiniz gibi ayarlayabilirsiniz.

ToolBar’ın rengini değiştirmek istiyorsanız yukarıda bahsettiğim tema için yazmanız gereken kodları inaktif hale getirmelisiniz, aksi takdirde aşağıdaki satır çalışmayacaktır. İsterseniz silin veya komut satırına alın. ToolBar rengini aşağıdaki satırla değiştiriyoruz.

IQKeyboardManager.sharedManager().toolbarBarTintColor = .red

Toolbar’daki “Done” yazısını aşağıdaki satır sayesinde değiştirebiliyoruz.

IQKeyboardManager.sharedManager().toolbarDoneBarButtonItemText = "Dismiss"

İsterseniz “Done” butonu yerine bir görsel atayabilirsiniz. Assets’e görseli attıktan sonra sağ taraftan Image Set içinden “Render as: Original Image” olarak işaretlemeyi unutmayın. O da şöyle oluyor:

IQKeyboardManager.sharedManager().toolbarDoneBarButtonItemImage = UIImage(named: "ikonunadiburaya")

UITextField/UITextView’ın dışında herhangi bir yere tıklandığında klavyenin gitmesini istiyorsanız aşağıdaki satırı yazmanız yeterli olacaktır.

IQKeyboardManager.sharedManager().shouldResignOnTouchOutside = true

Tuşlara tıklandığında klik sesinin çıkmamasını istiyorsanız şu satırı yazmalısınız. Default olarak bu “true” olarak gelir.

IQKeyboardManager.sharedManager().shouldPlayInputClicks = false

Eğer buraya kadar okuduysanız hepinize en içten teşekkürlerimi sunarım. Aklınıza takılan, yardımcı olabileceğim her soru için Linkedin hesabımdan bana ulaşabilirsiniz.

Kaynaklar ve İlaveten Okunabilecekler

--

--