İçeriğe geç

SwiftUI ile UISearchBar kullanımı

Merhabalar bu yazımda SwiftUI ile birlikte UISearchBar kullanımını sizle paylaşacağım.

Bu işlem için önceki yazımda bahsettiğim gibi ara bir sınıf oluşturarak UISearchBar elde etmeniz gerekir. Bunun için UIViewRepresentable protokolünü kullanacağız. SwiftUI içerisinde bulunmayan ve UIKit içerisinde kullandığınız tüm nesneleri bu şekilde SwiftUI ile yazdığınız uygulamalarda sorunsuz bir şekilde kullanabilirsiniz.

Aşağıda yazdığım örneği inceleyebilirsiniz.

import UIKit
import SwiftUI

struct SearchBar: UIViewRepresentable {

    @Binding var text: String

    class Coordinator: NSObject, UISearchBarDelegate {

        @Binding var text: String

        init(text: Binding<String>) {
            _text = text
        }

        func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
            text = searchText
        }
    }
    
    func makeCoordinator() -> SearchBar.Coordinator {
        return Coordinator(text: $text)
    }

    func makeUIView(context: UIViewRepresentableContext<SearchBar>) -> UISearchBar {
        let searchBar = UISearchBar(frame: .zero)
        searchBar.searchBarStyle = .minimal
        searchBar.delegate = context.coordinator
        searchBar.autocapitalizationType = .none
        return searchBar
    }

    func updateUIView(_ uiView: UISearchBar, context: UIViewRepresentableContext<SearchBar>) {
        uiView.text = text
    }
}

Diğer örneğimden farklı olarak burada Coordinator sınıfı kullandık. Bu sınıfa ekleyeceğiniz delegate ile UIKit içerisindeki gibi nesneleri yönetebiliriz. Sınıfa bağlı delegate kontrol etmek için eklememiz şart.

Daha sonrasında uygulama içerisinde sınıfımızı kullanalım.

import SwiftUI

struct ContentView:View {

    @State var searchText:String = ""
    let citys = ["İstanbul", "İzmir", "Ankara", "Kocaeli", "Bursa", "Antalya", "Bodrum"]

    var body: some View {
        NavigationView {
            List {
                SearchBar(text: $searchText)
                ForEach(self.citys.filter {self.searchText.isEmpty ? true : $0.localizedCaseInsensitiveContains(self.searchText)}, id: \.self) { name in
                    Text(name)
                }
            }
        .navigationBarTitle("Citys")
        }
    }
}

Böylelikle basit ve hızlı bir şekilde UISearchBar ile arama işlemimizi gerçekleştirmiş olduk.

 

Tarih:SwiftUI

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Copyright © 2021 Kenan Atmaca