1
extension HomeViewController: UISearchBarDelegate {


    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        //code
    }

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
         //code     
    }
}

This was working fine when it was at the bottom of my HomeViewController.
I wonder if I can separate this extension in separate file?

faris97
  • 402
  • 4
  • 24

3 Answers3

2

Yes it is possible.

Hope you know about extention in swift.

Extensions is useful feature that helps in adding more functionality to an existing Class, Structure, Enumeration or a Protocol type. This includes adding functionalities for types where you don’t have the original source code.

Code:

class HomeVC: UIViewController {

    var searchBar = UISearchBar()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.searchBar.delegate = self   
    }
}

create another file named HomeVC+SearchBarDelegate

import Foundation
import UIKit

extension HomeVC: UISearchBarDelegate {

    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        //code
    }

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
         //code
    }
}

I hope this will help you.

Thank you

NøBi Mac
  • 505
  • 5
  • 15
0

I forgot to include UIKit.

import Foundation
import UIKit

extension HomeViewController {
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)        {
      //code
    }

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
     //code
    } 
}

Also, you need to inherit UISearchBarDelegate in ViewController, not in extension.

faris97
  • 402
  • 4
  • 24
0

You can achieve this like below.

viewDidLoad(){
  let searchBar = UISearchBar()
  searchBar.delegate = DelegateFile()
}

create a file.

class DelegateFile: NSObject, UISearchBarDelegate{
    func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
        //
    }
}

Then implement your delegate methods in the seperate file.

eemrah
  • 1,603
  • 3
  • 19
  • 37