@interface TableViewAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
UINavigationController *navigationController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@end
#import "TableViewAppDelegate.h"
#import "RootViewController.h"
@implementation TableViewAppDelegate
@synthesize window;
@synthesize navigationController;
#pragma mark -
#pragma mark Application lifecycle
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after app launch
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
}
- (void)applicationWillTerminate:(UIApplication *)application {
// Save data if appropriate
}
#pragma mark -
#pragma mark Memory management
- (void)dealloc {
[navigationController release];
[window release];
[super dealloc];
}
@end
@interface RootViewController : UITableViewController
<UISearchBarDelegate>{
NSDictionary *movieTitles;
NSArray *years;
//---search---
IBOutlet UISearchBar *searchBar;
BOOL isSearchOn;
BOOL canSelectRow;
NSMutableArray *listOfMovies;
NSMutableArray *searchResult;
}
@property (nonatomic, retain) NSDictionary *movieTitles;
@property (nonatomic, retain) NSArray *years;
//---search---
@property (nonatomic, retain) UISearchBar *searchBar;
- (void) doneSearching: (id)sender;
- (void) searchMoviesTableView;
@end
#import "RootViewController.h"
@implementation RootViewController
@synthesize movieTitles, years;
@synthesize searchBar;
- (void)viewDidLoad {
NSString *path = [[NSBundle mainBundle] pathForResource:@"Movies"
ofType:@"plist"];
NSDictionary *dic = [[NSDictionary alloc] initWithContentsOfFile:path];
self.movieTitles = dic;
NSArray *array = [[movieTitles allKeys]
sortedArrayUsingSelector:@selector(compare:)];
self.years = array;
[dic release];
//---display the searchbar---
self.tableView.tableHeaderView = searchBar;
searchBar.autocorrectionType = UITextAutocorrectionTypeYes;
//---copy all the movie titles in the dictionary into the listOfMovies array---
listOfMovies = [[NSMutableArray alloc] init];
for (NSString *year in array) //---get all the years---
{
//---get all the movies for a particular year---
NSArray *movies = [movieTitles objectForKey:year];
for (NSString *title in movies)
{
[listOfMovies addObject:title];
}
}
//---used for storing the search result---
searchResult = [[NSMutableArray alloc] init];
isSearchOn = NO;
canSelectRow = YES;
[super viewDidLoad];
}
//---fi red when the user taps on the searchbar--- 光标聚焦
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
isSearchOn = YES;
canSelectRow = NO;
self.tableView.scrollEnabled = NO;
//---add the Done button at the top---
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemDone
target:self action:@selector(doneSearching:)] autorelease];
}
//---done with the searching--- 点击done按钮
- (void) doneSearching:(id)sender {
isSearchOn = NO;
canSelectRow = YES;
self.tableView.scrollEnabled = YES;
self.navigationItem.rightBarButtonItem = nil;
//---hides the keyboard---
[searchBar resignFirstResponder];
//---refresh the TableView---
[self.tableView reloadData];
}
//---fi red when the user types something into the searchbar--- 有值输入
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
//---if there is something to search for--- 改变cell值 和 去掉tableView section(通过预先设定好的标志)
if ([searchText length] > 0) {
isSearchOn = YES;
canSelectRow = YES;
self.tableView.scrollEnabled = YES;
[self searchMoviesTableView];
}
else {
//---nothing to search---
isSearchOn = NO;
canSelectRow = NO;
self.tableView.scrollEnabled = NO;
}
[self.tableView reloadData];
}
- (void) searchMoviesTableView {
//---clears the search result---
[searchResult removeAllObjects];
//过滤搜索结果
for (NSString *str in listOfMovies)
{
//指定开始 匹配的location 和最大匹配长度
//NSRange r;
// r.location = 0;
// r.length = 2;
NSRange titleResultsRange = [str rangeOfString:searchBar.text
options:NSCaseInsensitiveSearch range:r];
NSLog(@"%@ %d %d",str,titleResultsRange.length,titleResultsRange.location);
if (titleResultsRange.length > 0)
[searchResult addObject:str];
}
NSLog(@"%d",[searchResult count]);
}
///---fi red when the user taps the Search button on the keyboard---
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
[self searchMoviesTableView];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
if (isSearchOn)
return 1;
else
return [years count];
}
// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section {
if (isSearchOn) {
return [searchResult count];
} else
{
NSString *year = [years objectAtIndex:section];
NSArray *movieSection = [movieTitles objectForKey:year];
return [movieSection count];
}
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell.
if (isSearchOn) {
NSString *cellValue = [searchResult objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;
} else {
NSString *year = [years objectAtIndex:[indexPath section]];
NSArray *movieSection = [movieTitles objectForKey:year];
cell.textLabel.text = [movieSection objectAtIndex:[indexPath row]];
}
return cell;
}
// 分区标题
- (NSString *)tableView:(UITableView *)tableView
titleForHeaderInSection:(NSInteger)section {
NSString *year = [years objectAtIndex:section];
if (isSearchOn)
return nil;
else
return year;
}
// tableView 右侧索引
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
if (isSearchOn)
return nil;
else
return years;
}
//---fired before a row is selected--- cell是否可选
- (NSIndexPath *)tableView :(UITableView *)theTableView
willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (canSelectRow)
return indexPath;
else
return nil;
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Release anything that can be recreated in viewDidLoad or on demand.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[years release];
[movieTitles release];
[searchBar release];
[super dealloc];
}
@end
分享到:
相关推荐
本教程将带你入门iPhone上的UITableView使用,通过一个简单的示例项目"**MyTableView**"来深入理解其工作原理和基本操作。 首先,UITableView的主要组成部分包括:表头(HeaderInSection)、表尾(FooterSection)...
本教程将深入探讨如何在iPhone应用中使用UITableView进行排序、搜索以及通过Interface Builder进行创建。 首先,我们来了解一下UITableView的基本概念。UITableView是一个视图控件,用于显示一列或多列数据,每个...
通过以上步骤,我们就能在iPhone的UITableView中实现类似ComboBox的功能。这不仅提供了用户友好的界面,还能充分利用iOS平台的原生特性,提高应用的性能和一致性。记得在实际开发中,根据具体需求进行调整,如添加...
总之,这个源码示例涵盖了如何在`UITableView`中实现高效且用户友好的索引和搜索功能,是学习iOS开发尤其是iPhone应用开发的一个实用教程。通过深入理解并实践这些知识点,开发者可以构建更强大、更易用的iOS应用。
在iOS开发中,iPhone TableSearch是一个重要的功能,它允许用户在UITableView中实时搜索并筛选数据。这个功能极大地提升了用户体验,使用户能够快速找到所需的信息。本文将深入探讨TableSearch的实现原理、步骤以及...
这几天在和一个搞Iphone编程的一起探讨一个关于TableViewCell的删除问题,在NAvigation里面添加Cell然后删除,不要Iphone开发基础教程中的呢样,在每一个cell中添加一个按钮,点击按钮直接删除该行,在CC上搜索很多...
"Iphone TableView 搜索"这个主题涉及到如何在UITableView中实现搜索功能,使得用户能够方便地在大量数据中查找特定内容。这种功能通常被称为“搜索栏”或“过滤器”,在iOS应用中是非常常见且实用的。 1. **...
在iOS应用开发中,`UISearchBar` 和 `UITableView` 是两个非常重要的组件,它们的结合使用可以实现强大的搜索功能,使用户能够快速找到所需信息。本教程将深入讲解如何在iPhone应用中有效利用这两个组件,特别是在...
在iOS开发中,实现iPhone通讯录功能是一项常见的任务,它...总之,构建一个功能完善的iPhone通讯录应用,不仅需要掌握`UITableView`的使用,还要理解数据排序、索引和搜索的相关原理,并能适配多语言环境下的中文处理。
本文将通过标题"iPhone development tableView sample"中的两个范例,详细讲解如何运用UITableView及其与NavigationController和SearchBar的结合。 一、UITableView基础用法 1. 初始化:首先,我们需要创建一个...
本示例着重于如何在iPhone应用中集成这些元素,实现一个功能完善的搜索功能。 `TabBar`是iOS中的底部导航栏,它允许用户在多个视图间轻松切换。每个TabBar项通常对应一个`UITabBarController`的子控制器,展示不同...
本示例"TableViewExample.zip"应该是包含了创建和使用UITableView的一个实例项目,适合于iPhone和iPad设备。下面我们将深入探讨UITableView的相关知识点。 1. UITableView基本结构: UITableView由多个单元格...
本篇文章主要探讨了iOS11、iPhone X以及Xcode9的适配问题,帮助开发者解决在升级过程中遇到的各种挑战。 首先,我们来看升级到iOS11后可能遇到的适配问题。在iOS11中,`UIViewController`的`...
在iPhone开发中,UITableView是一个非常重要的控件,用于展示列表数据。它提供了丰富的功能,包括但不限于数据展示、分组、排序、搜索、编辑等。在本文中,我们将深入探讨UITableView的编辑模式和移动模式,以及如何...
【标题】:“iPhone 类似 QQ 通讯录 Demo” 在 iOS 开发中,创建一个类似 QQ 通讯录的应用是一项常见的挑战,这涉及到多个技术层面的整合。QQ 通讯录以其直观的用户界面和强大的功能深受用户喜爱,因此,开发一个...
总结起来,"iPhone电话本程序"的开发涵盖了iOS应用开发的多个方面,包括使用Contacts框架处理联系人数据、UI设计、权限请求、数据加载与展示、导航跳转、搜索功能以及数据持久化。对于初学者来说,这是一个全面了解...
在iOS开发中,`UITableView`是用于展示列表数据的核心组件,它在iPhone应用中扮演着重要角色,尤其是在社交应用如QQ中。`UITableView`能够高效地处理大量数据,并且提供了可滚动的界面,使得用户可以浏览和交互。在...
图书搜索功能是系统的核心之一。在iOS中,实现这一功能可能涉及到UISearchBar组件,用户可以通过输入关键词快速找到想要的图书。为了提高搜索效率,开发者可能会采用数据结构如哈希表或者利用数据库的全文索引技术。...
iPhone 和iPod touch 随带的许多乃至大 部分应用程序都以表格为中心,包括Settings、YouTube、Stocks 和Weather。第5章展示iPhone 表 格的工作方式,哪些表格对于开发人员可用,以及如何在自己的程序中使用表格特性...