我需要一个方法来展示从(可能是)异步源(如查询网络后端)来的可搜索的项目列表。在Web/JS应用程序中有很多小部件来完成这种类型的事情,但在Google上没有找到任何预构建的iOS小部件。
JCAutocompletingSearch 允许您通过其代理执行查询来展示一个搜索控制器。结果的一个可能来源是网络后端。考虑到这类搜索的异步(和延迟)性质,JCAutocompletingSearch 在必要时会自动显示加载指示器,并管理不需要显示的无序响应。
代理必须实现以下方法
代理可以可选地实现以下方法
一个可工作样例 iOS Xcode 项目可以在 Demo
目录中找到。
#import "JCAutocompletingSearchViewControllerDelegate.h"
@interface MySearchDelegate : NSObject <JCAutocompletingSearchViewControllerDelegate>
@end
#import "JCAutocompletingSearchViewController.h"
@implementation MySearchDelegate
- (void) searchController:(JCAutocompletingSearchViewController*)searchController
performSearchForQuery:(NSString*)query
withResultsHandler:(JCAutocompletingSearchResultsHandler)resultsHandler {
resultsHandler(@[
@{@"label": @"Result 1"},
@{@"label": @"Result 2"},
@{@"label": @"Result 3"}
]);
}
- (void) searchControllerCanceled:(JCAutocompletingSearchViewController*)searchController {
// Handle search cancellation.
}
- (void) searchController:(JCAutocompletingSearchViewController*)searchController
tableView:(UITableView*)tableView
selectedResult:(id)result {
// Handle search result selection.
}
// Optional.
- (BOOL) searchControllerShouldPerformBlankSearchOnLoad:(JCAutocompletingSearchViewController*)searchController {
return YES;
}
// Optional.
- (BOOL) searchController:(JCAutocompletingSearchViewController*)searchController shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
// Optional.
- (dispatch_time_t) searchControllerDelaySearchingUntilQueryUnchangedForTimeOffset:(JCAutocompletingSearchViewController*)searchController {
return 0.2 * NSEC_PER_SEC;
}
// Optional.
- (BOOL) searchControllerShouldDisplayNetworkActivityIndicator:(JCAutocompletingSearchViewController*)searchController {
return YES; // Defaults to YES.
}
// Optional.
- (void) searchController:(JCAutocompletingSearchViewController*)searchController didChangeActivityInProgressToEnabled:(BOOL)activityInProgress {
NSLog(@"Activity indicator changed to: %@", (activityInProgress ? @"YES" : @"NO"));
}
@end
// ------------------------------------------------------------------------
- (BOOL) application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
JCAutocompletingSearchViewController* searchController = [JCAutocompletingSearchViewController autocompletingSearchViewController];
searchController.delegate = [MySearchDelegate new];
UINavigationController* navigationController = [[UINavigationController alloc] initWithRootViewController:searchController];
navigationController.navigationBarHidden = YES;
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
return YES;
}
此项目包含用于 CocoaPods 的 podspec
。只需将以下内容添加到您的 Podfile
,然后运行 pod install
。
pod 'JCAutocompletingSearch'
添加到您的 Podfile
并运行 pod install
。
或者,您可以将此项目 Library
目录中包含的所有文件添加到您的 Xcode 项目中。如果您的项目不使用 ARC,您需要在这些文件上启用 ARC。您可以通过添加 -fobjc-arc 标志来按文件启用 ARC,如StackOverflow 上的常见问题所述。
本项目采用MIT许可证发行。所有版权均归本人所有。
版权所有 (c) 2012 詹姆斯·科勒曼
在此授予任何获得此软件及相关文档副本(以下简称“软件”)的个人免费使用该软件的权利,不受限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向软件提供者授予此项许可的个人进行如此操作,前提是遵守以下条件:
上述版权声明和许可声明必须包含在软件所有副本或主要部分中。
软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、特定目的适用性和非侵权的保证。在任何情况下,作者或版权持有人不对任何索赔、损害或其他责任(包括合同行为、侵权或其他行为)负责,不论其源于、因之而发生或在软件或其使用或其他操作的过程中产生。