ios UIKit框架分析 第2天

本文介绍UITableView的右侧索引实现及动态加载技巧,并演示如何利用UILocalizedIndexedCollation进行数据源管理,实现高效的索引搜索与排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.UITableView

->@property(nonatomic,retain)UIView *tableFooterView用于动态实现上拉刷新加载更多得提示视图;参考:http://blog.youkuaiyun.com/wwwang89123/article/details/11663751

右侧索引字幕得颜色以及点击时候得背景颜色

@property(nonatomic,retain) UIColor *sectionIndexColorNS_AVAILABLE_IOS(6_0) UI_APPEARANCE_SELECTOR;                   // color used for text of the section index

@property(nonatomic,retain) UIColor *sectionIndexBackgroundColorNS_AVAILABLE_IOS(7_0)UI_APPEARANCE_SELECTOR;         // the background color of the section index while not being touched

@property(nonatomic,retain) UIColor *sectionIndexTrackingBackgroundColorNS_AVAILABLE_IOS(6_0)UI_APPEARANCE_SELECTOR; // the background color of the section index while it is being touched


->两个重要得数据源协议实现    电话簿快速查找的索引效果

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView;                                                   // return list of section titles to display in section index view (e.g. "ABCD...Z#")

显示右边的索引字幕

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView 
{
     NSMutableArray *toBeReturned = [[NSMutableArray alloc]init];
     for(char c = ‘A’;c<=‘Z’;c++)
          [toBeReturned addObject:[NSString stringWithFormat:@"%c",c]];
    return toBeReturned;
 
}


- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index; // tell table which section corresponds to section title/index (e.g. "B",1))

把右边的字幕和tableView的section关联起来,return的 count 就是滚到最顶端的section的index。

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index 
{
    NSInteger count = 0;
     for(NSString *character in arrayOfCharacters)
   {
        if([character isEqualToString:title])
        {
                 return count;
          }
         count ++;
    }
     return 0;
 
}


参考:http://blog.sina.com.cn/s/blog_6084f5880100ud6t.html


->UITableViewCell 的移动 插入 删除 标记等操作   参考:http://blog.youkuaiyun.com/duxinfeng2010/article/details/7725897


2.UILocalizedIndexedCollation 

-》UILocalizedIndexedCollation 管理数据源 实现tableview的索引搜索

参考:http://blog.youkuaiyun.com/developer_zhang/article/details/8904464

demon下载地址http://download.youkuaiyun.com/detail/u010013695/5347923


// Provides the list of section titles used to group results (e.g. A-Z,# in US/English) 提供tableView的头部的内容 A - Z,#27个字母;

@property(nonatomic,readonly) NSArray *sectionTitles;

//设置Section的Header的值
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    
    NSString *key = [[[UILocalizedIndexedCollation currentCollation] sectionTitles] objectAtIndex:section];
    
    return key;
    
}


@property(nonatomic,readonly) NSArray *sectionIndexTitles;  为tableView右侧的索引栏提供显示内容  a-z,#27个字母。


//设置表格的索引数组
-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{

    return [[UILocalizedIndexedCollation currentCollation] sectionIndexTitles];
    
}


- ( NSInteger )sectionForObject:( id )object collationStringSelector:( SEL )selector; //依据某个对象的字符串类型的属性 locaName的首字母 把该对象归入相应的section。--   把索引标题与tableView的section关联起来。

// Segregate the time zones into the appropriate arrays.
	for (ZYTimeZoneWrapper *timeZone in timeZonesArray) {
		
        //根据timezone的localename,获得对应的时区的section number
		NSInteger sectionNumber = [collation sectionForObject:timeZone collationStringSelector:@selector(localeName)];
		
        NSLog(@"sectionNo:%d  localName is :%@",sectionNumber,timeZone.localeName);
        //获得section的数组
		NSMutableArray *sectionTimeZones = [newSectionsArray objectAtIndex:sectionNumber];
		
        //添加时区内容到section中
		[sectionTimeZones addObject:timeZone];
	}



- (NSInteger)sectionForSectionIndexTitleAtIndex:(NSInteger)indexTitleIndex;

// 根据点击的索引字母跳到相应的section
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{

   return  [[UILocalizedIndexedCollation currentCollation] sectionForSectionIndexTitleAtIndex:index];
}


- (NSArray *)sortedArrayFromArray:(NSArray *)array collationStringSelector:(SEL)selector;


     ZYTimeZoneWrapper * time1 = [[[ZYTimeZoneWrapper alloc]initWithName:@"你好"]autorelease];
     ZYTimeZoneWrapper * time2 = [[[ZYTimeZoneWrapper alloc]initWithName:@"yong"]autorelease];
     ZYTimeZoneWrapper * time3 = [[[ZYTimeZoneWrapper alloc]initWithName:@"飞"]autorelease];
     ZYTimeZoneWrapper * time4 = [[[ZYTimeZoneWrapper alloc]initWithName:@"qing"]autorelease];
     ZYTimeZoneWrapper * time5 = [[[ZYTimeZoneWrapper alloc]initWithName:@"超"]autorelease];
    NSArray * temp = [NSArray arrayWithObjects:time1,time2,time3,time4,time5,nil];
    
    NSArray * sortA = [[UILocalizedIndexedCollation currentCollation] sortedArrayFromArray:temp collationStringSelector:@selector(name)];
    NSLog(@"%@",[sortA description]);

依据对象的字符串类型的属性name的首个字母(中文则为拼音的首个字符)进行排序 默认顺序为(a - z);


->索引栏上显示搜索的标志

代码如下:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
    return [[NSArray arrayWithObject:UITableViewIndexSearch] arrayByAddingObjectsFromArray:[[UILocalizedIndexedCollation currentCollation] sectionIndexTitles]];
}
效果图如下: A字母上的标识



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值