讓控制器遵循 UISearchBarDelegate,並實作 searchBarSearchButtonClicked: 方法。
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)")
}
}
// .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: 清空輸入並收起鍵盤。searchBar:selectedScopeButtonIndexDidChange:。UISearchController 取代手動管理 SearchBar,整合結果控制器更簡潔。delegate = self。returnKeyType = .search 顯示搜尋鍵。searchBarSearchButtonClicked:,內部先 resignFirstResponder 再執行搜尋。此模式為 iOS 搜尋交互的標準做法,穩定且符合人機介面指引。