首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS UISearchBar 鍵盤搜尋按鈕響應:實作 searchBarSearchButtonClicked 代理方法

     編輯:程式設計綜合問答

核心解法

讓控制器遵循 UISearchBarDelegate,並實作 searchBarSearchButtonClicked: 方法。

完整代碼

Swift

class ViewController: UIViewController, UISearchBarDelegate {
    @IBOutlet weak var searchBar: UISearchBar!

    override func viewDidLoad() {
        super.viewDidLoad()
        searchBar.delegate = self
        searchBar.returnKeyType = .search // 確保鍵盤顯示「搜尋」鍵
    }

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        searchBar.resignFirstResponder() // 收起鍵盤
        guard let query = searchBar.text?.trimmingCharacters(in: .whitespacesAndNewlines), !query.isEmpty else { return }
        performSearch(query)
    }

    func performSearch(_ query: String) {
        // 執行搜尋邏輯:資料庫查詢、網路請求、本地過濾等
        print("搜尋關鍵字:\(query)")
    }
}

Objective-C

// .h
@interface ViewController : UIViewController 
@property (weak, nonatomic) IBOutlet UISearchBar *searchBar;
@end

// .m
- (void)viewDidLoad {
    [super viewDidLoad];
    self.searchBar.delegate = self;
    self.searchBar.returnKeyType = UIReturnKeySearch;
}

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
    [searchBar resignFirstResponder];
    NSString *query = [searchBar.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    if (query.length > 0) {
        [self performSearch:query];
    }
}

- (void)performSearch:(NSString *)query {
    NSLog(@"搜尋關鍵字:%@", query);
}

常見補充

  • 即時搜尋:實作 searchBar:textDidChange: 配合防抖動(debounce)邏輯。
  • 取消按鈕:實作 searchBarCancelButtonClicked: 清空輸入並收起鍵盤。
  • Scope Bar:若使用分類篩選,實作 searchBar:selectedScopeButtonIndexDidChange:。
  • iOS 13+:可用 UISearchController 取代手動管理 SearchBar,整合結果控制器更簡潔。

關鍵點總結

  1. 設定 delegate = self。
  2. 設定 returnKeyType = .search 顯示搜尋鍵。
  3. 實作 searchBarSearchButtonClicked:,內部先 resignFirstResponder 再執行搜尋。

此模式為 iOS 搜尋交互的標準做法,穩定且符合人機介面指引。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved