खोज…


वाक्य - विन्यास

  • UISearchController (searchResultsController: UIViewController?) // एनआईएल पैरामीटर के रूप में यदि खोज अपडेट नियंत्रक भी खोजा सामग्री प्रदर्शित करता है।
  • func updateSearchResults (searchController: UISearchController के लिए) // UISearchResultsUpdating प्रोटोकॉल को अपनाने पर लागू करने के लिए आवश्यक विधि

पैरामीटर

पैरामीटर विवरण
UISearchController.searchBar आपके इंटरफ़ेस में इंस्टॉल करने के लिए खोज बार। (सिफ़ पढ़िये)
UISearchController.searchResultsUpdater खोज परिणाम नियंत्रक की सामग्री को अद्यतन करने के लिए जिम्मेदार वस्तु।
UISearchController.isActive खोज इंटरफ़ेस की प्रस्तुत स्थिति।
UISearchController.obscuresBackgroundDuringPresentation एक बूलियन यह दर्शाता है कि खोज के दौरान अंतर्निहित सामग्री अस्पष्ट है या नहीं।
UISearchController.dimsBackgroundDuringPresentation एक बूलियन यह दर्शाता है कि खोज के दौरान अंतर्निहित सामग्री मंद हो गई है या नहीं।
UISearchController.hidesNavigationBarDuringPresentation एक बूलियन यह दर्शाता है कि खोज करते समय नेविगेशन बार को छिपाया जाना चाहिए या नहीं।
UIViewController.definesPresentationContext एक बूलियन मान जो इंगित करता है कि क्या यह दृश्य नियंत्रक का दृश्य कवर किया गया है जब दृश्य नियंत्रक या उसके वंशजों में से एक दृश्य नियंत्रक प्रस्तुत करता है।
UIViewController.navigationItem.titleView एक कस्टम दृश्य नेविगेशन बार के केंद्र में प्रदर्शित होता है जब रिसीवर शीर्ष आइटम होता है जिसमें एक खोज बार रखा जा सकता है।
UITableViewController.tableView.tableHeaderView एक सहायक दृश्य देता है जो तालिका के ऊपर प्रदर्शित होता है जिसमें एक खोज बार रखा जा सकता है।

टिप्पणियों

UIKit फ्रेमवर्क संदर्भ:

UISearchController

UISearchResultsUpdating

नेविगेशन बार शीर्षक में बार खोजें

यह उदाहरण तालिका दृश्य नियंत्रक के अंदर डेटा को फ़िल्टर करने के लिए एक खोज नियंत्रक का उपयोग करता है। सर्च बार को नेविगेशन बार के अंदर रखा जाता है कि टेबल व्यू अंदर इंबेडेड हो।

खोज-बार-इन-नव-बार

UINavigationItem (जिसमें नेविगेशन बार होता है) प्राप्त करने के लिए UINavigationController में एक UITableViewController एम्बेड करें। फिर हमारे कस्टम ViewController वर्ग को UITableViewController से विरासत में मिला और UISearchResultsUpdating प्रोटोकॉल को अपनाएं।

class ViewController: UITableViewController, UISearchResultsUpdating {

    let entries = [(title: "Easiest", image: "green_circle"),
                   (title: "Intermediate", image: "blue_square"),
                   (title: "Advanced", image: "black_diamond"),
                   (title: "Expert Only", image: "double_black_diamond")]
    
    // An empty tuple that will be updated with search results.
    var searchResults : [(title: String, image: String)] = []
    
    let searchController = UISearchController(searchResultsController: nil)

    override func viewDidLoad() {
        super.viewDidLoad()
        
        searchController.searchResultsUpdater = self
        self.definesPresentationContext = true

        // Place the search bar in the navigation item's title view.
        self.navigationItem.titleView = searchController.searchBar

        // Don't hide the navigation bar because the search bar is in it.
        searchController.hidesNavigationBarDuringPresentation = false
    }
    
    func filterContent(for searchText: String) {
        // Update the searchResults array with matches
        // in our entries based on the title value.
        searchResults = entries.filter({ (title: String, image: String) -> Bool in
            let match = title.range(of: searchText, options: .caseInsensitive)
            // Return the tuple if the range contains a match.
            return match != nil
        })
    }

    // MARK: - UISearchResultsUpdating method
    
    func updateSearchResults(for searchController: UISearchController) {
        // If the search bar contains text, filter our data with the string
        if let searchText = searchController.searchBar.text {
            filterContent(for: searchText)
            // Reload the table view with the search result data.
            tableView.reloadData()
        }
    }

    // MARK: - UITableViewController methods
    
    override func numberOfSections(in tableView: UITableView) -> Int { return 1 }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // If the search bar is active, use the searchResults data.
        return searchController.isActive ? searchResults.count : entries.count
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // If the search bar is active, use the searchResults data.
        let entry = searchController.isActive ? 
                    searchResults[indexPath.row] : entries[indexPath.row]
        
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        cell.textLabel?.text = entry.title
        cell.imageView?.image = UIImage(named: entry.image)
        return cell
    }
}

तालिका बार हेडर में बार खोजें

यह उदाहरण तालिका दृश्य नियंत्रक में कोशिकाओं को फ़िल्टर करने के लिए खोज नियंत्रक का उपयोग करता है। खोज बार को तालिका दृश्य के शीर्ष लेख दृश्य के अंदर रखा जाता है। तालिका दृश्य सामग्री खोज पट्टी के समान ऊँचाई के साथ ऑफसेट है ताकि खोज बार पहले छिपा हो। तालिका दृश्य के शीर्ष किनारे पर स्क्रॉल करने पर, खोज बार सामने आता है। फिर जब खोज बार सक्रिय हो जाता है, तो यह नेविगेशन बार को छिपा देता है।

खोज-बार-इन-टेबल हैडर-gif खोज-बार-इन-टेबल हैडर

UINavigationItem (जिसमें नेविगेशन बार शामिल है) प्राप्त करने के लिए UINavigationController में एक UITableViewController एम्बेड करें। फिर हमारे कस्टम ViewController वर्ग को UITableViewController से विरासत में मिला और UISearchResultsUpdad प्रोटोकॉल को अपनाएं।

class ViewController: UITableViewController, UISearchResultsUpdating {

    let entries = [(title: "Easiest", image: "green_circle"),
                   (title: "Intermediate", image: "blue_square"),
                   (title: "Advanced", image: "black_diamond"),
                   (title: "Expert Only", image: "double_black_diamond")]
    
    // An empty tuple that will be updated with search results.
    var searchResults : [(title: String, image: String)] = []
    
    let searchController = UISearchController(searchResultsController: nil)

    override func viewDidLoad() {
        super.viewDidLoad()
        
        searchController.searchResultsUpdater = self
        self.definesPresentationContext = true

        // Place the search bar in the table view's header.
        self.tableView.tableHeaderView = searchController.searchBar

        // Set the content offset to the height of the search bar's height
        // to hide it when the view is first presented.
        self.tableView.contentOffset = CGPoint(x: 0, y: searchController.searchBar.frame.height)
    }
    
    func filterContent(for searchText: String) {
        // Update the searchResults array with matches
        // in our entries based on the title value.
        searchResults = entries.filter({ (title: String, image: String) -> Bool in
            let match = title.range(of: searchText, options: .caseInsensitive)
            // Return the tuple if the range contains a match.
            return match != nil
        })
    }

    // MARK: - UISearchResultsUpdating method
    
    func updateSearchResults(for searchController: UISearchController) {
        // If the search bar contains text, filter our data with the string
        if let searchText = searchController.searchBar.text {
            filterContent(for: searchText)
            // Reload the table view with the search result data.
            tableView.reloadData()
        }
    }

    // MARK: - UITableViewController methods
    
    override func numberOfSections(in tableView: UITableView) -> Int { return 1 }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // If the search bar is active, use the searchResults data.
        return searchController.isActive ? searchResults.count : entries.count
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // If the search bar is active, use the searchResults data.
        let entry = searchController.isActive ? 
                    searchResults[indexPath.row] : entries[indexPath.row]
        
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        cell.textLabel?.text = entry.title
        cell.imageView?.image = UIImage(named: entry.image)
        return cell
    }
}

कार्यान्वयन

सबसे पहले, UISearchResultsUpdating प्रोटोकॉल के साथ अपनी कक्षा का अनुपालन करें।

class MyTableViewController: UITableViewController, UISearchResultsUpdating {}

खोज नियंत्रक गुण जोड़ें:

class MyTableViewController: UTableViewController, UISearchResultsUpdating {
    let searchController = UISearchController(searchResultsController: nil)
}

खोज बार जोड़ें:

override func viewDidLoad() {
    super.viewDidLoad()

    searchController.searchResultsUpdater = self
    searchController.hidesNavigationBarDuringPresentation = false
    searchController.dimsBackgroundDuringPresentation = false
    searchController.searchBar.sizeToFit()
    self.tableView.tableHeaderView = searchController.searchBar
}

और अंत में, लागू updateSearchResultsForSearchController विधि से आता है UISearchResultsUpdating प्रोटोकॉल:

func updateSearchResultsForSearchController(searchController: UISearchController) {

}

उद्देश्य-सी में UISerachController

Delegate: UISearchBarDelegate, UISearchControllerDelegate, UISearchBarDelegate

@property (strong, nonatomic)  UISearchController *searchController;

- (void)searchBarConfiguration
{
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    self.searchController.searchBar.delegate = self;
    self.searchController.hidesNavigationBarDuringPresentation = NO;
    
    // Hides search bar initially.  When the user pulls down on the list, the search bar is revealed.
    [self.tableView setContentOffset:CGPointMake(0, self.searchController.searchBar.frame.size.height)];
    
    self.searchController.searchBar.backgroundColor = [UIColor DarkBlue];
    self.searchController.searchBar.tintColor = [UIColor DarkBlue];
    
    self.tableView.contentOffset = CGPointMake(0, CGRectGetHeight(_searchController.searchBar.frame));
    self.tableView.tableHeaderView = _searchController.searchBar;
    _searchController.searchBar.delegate = self;
    _searchController.searchBar.showsCancelButton = YES;
    self.tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resetSearchbarAndTableView)];
    [self.view addGestureRecognizer:self.tapGestureRecognizer];
    
}

- (void)resetSearchbarAndTableView{
// Reload your tableview and resign keyboard.
}


- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
// Search cancelled
}
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
// Implement filtration of your data as per your need using NSPredicate or else.
// then reload your data control like Tableview.
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow