JCAutocompletingSearch 0.9.6

JCAutocompletingSearch 0.9.6

测试测试
语种语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

James Coleman维护。



  • James Coleman

为什么?

我需要一个方法来展示从(可能是)异步源(如查询网络后端)来的可搜索的项目列表。在Web/JS应用程序中有很多小部件来完成这种类型的事情,但在Google上没有找到任何预构建的iOS小部件。

是什么?

JCAutocompletingSearch 允许您通过其代理执行查询来展示一个搜索控制器。结果的一个可能来源是网络后端。考虑到这类搜索的异步(和延迟)性质,JCAutocompletingSearch 在必要时会自动显示加载指示器,并管理不需要显示的无序响应。

代理必须实现以下方法

  • 搜索
  • 取消按钮动作
  • 结果选择动作

代理可以可选地实现以下方法

  • 控制是否在加载时执行空白搜索
  • 控制是否同步执行搜索(同步搜索不会显示加载指示器单元格)
  • 控制是否延迟/批量处理搜索--也就是说,搜索控制器可以在搜索字段没有变化一段可配置的延迟后等待执行搜索。
  • 控制是否应该自动旋转到新的设备方向
  • 提供一个在自定义 UITableViewCell 中展示结果的能力

Sample application screenshot

示例代码?

一个可工作样例 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;
}

安装?

此项目包含用于 CocoaPodspodspec。只需将以下内容添加到您的 Podfile,然后运行 pod install

pod 'JCAutocompletingSearch'

添加到您的 Podfile 并运行 pod install

或者,您可以将此项目 Library 目录中包含的所有文件添加到您的 Xcode 项目中。如果您的项目不使用 ARC,您需要在这些文件上启用 ARC。您可以通过添加 -fobjc-arc 标志来按文件启用 ARC,如StackOverflow 上的常见问题所述。

许可证

本项目采用MIT许可证发行。所有版权均归本人所有。

版权所有 (c) 2012 詹姆斯·科勒曼

在此授予任何获得此软件及相关文档副本(以下简称“软件”)的个人免费使用该软件的权利,不受限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向软件提供者授予此项许可的个人进行如此操作,前提是遵守以下条件:

上述版权声明和许可声明必须包含在软件所有副本或主要部分中。

软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、特定目的适用性和非侵权的保证。在任何情况下,作者或版权持有人不对任何索赔、损害或其他责任(包括合同行为、侵权或其他行为)负责,不论其源于、因之而发生或在软件或其使用或其他操作的过程中产生。