现在的位置: 首页 > 综合 > 正文

IOS 类似iphone通讯录TableView的完整demo【附源码】

2017年11月30日 ⁄ 综合 ⁄ 共 5240字 ⁄ 字号 评论关闭

初学objective-c,自己写的一个demo,有不足之处请指正:

效果图:

核心代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    NSArray *array = [[NSArray alloc] initWithObjects:@"你好", @"BFlower",
                      @"CGrass", @"DFence", @"EHouse", @"FTable", @"GChair",
                      @"HBook", @"ISwing" ,@"JWang" ,@"KDong" ,@"LNi" ,@"MHao" ,@"Na" ,@"Oa" ,@"Pa" ,@"Qa" ,@"Ra" ,@"Sa" ,@"Ta" ,@"Ua" ,@"Va" ,@"Wa" ,@"Xa" ,@"Ya" ,@"Za", nil];
    self.listarray = array;
    NSLog(@"listarryCount:%d",[listarray count]);
    secLabelArray = [[NSArray alloc] initWithObjects:@"A", @"B", @"C",@"D", @"E", @"F",@"G", @"H", @"I",@"J", @"K", @"L",@"M", @"N", @"O",@"P", @"Q", @"R",@"S", @"T", @"U",@"V", @"W", @"X",@"Y", @"Z", nil];
    
    NSArray *arrayA = [[NSArray alloc] initWithObjects:@"测试A1",@"测试A2", nil];
    NSArray *arrayB = [[NSArray alloc] initWithObjects:@"测试B1",@"测试B2",@"测试B3", nil];
    NSArray *arrayC = [[NSArray alloc] initWithObjects:@"测试C1",@"测试C2",@"测试C3",@"测试C4", nil];
    NSArray *arrayD = [[NSArray alloc] initWithObjects:@"测试D1",@"测试D2",@"测试D3",@"测试D4",@"测试D5", nil];
    NSArray *arrayE = [[NSArray alloc] initWithObjects:@"测试E1",@"测试E2",@"测试E3",@"测试E4",@"测试E5",@"测试E6", nil];
    NSArray *arrayF = [[NSArray alloc] initWithObjects:@"测试F1",@"测试F2",@"测试F3",@"测试F4",@"测试F5",@"测试F6",@"测试F7", nil];
    NSArray *arrayG = [[NSArray alloc] initWithObjects:@"测试G1",@"测试G2",@"测试G3",@"测试G4",@"测试G5",@"测试G6", nil];
    arrayDictKey = [[NSArray alloc] initWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G", nil];
    arrayDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:arrayA,[arrayDictKey objectAtIndex:0],
                                                                    arrayB,[arrayDictKey objectAtIndex:1],
                                                                    arrayC,[arrayDictKey objectAtIndex:2],
                                                                    arrayD,[arrayDictKey objectAtIndex:3],
                                                                    arrayE,[arrayDictKey objectAtIndex:4],
                                                                    arrayF,[arrayDictKey objectAtIndex:5],
                                                                    arrayG,[arrayDictKey objectAtIndex:6],
                                                                            nil];
    NSLog(@"arrayrow:%d",[[arrayDict objectForKey:[arrayDictKey objectAtIndex:1]] count]);
    
     tableView=[[UITableView alloc]initWithFrame:CGRectMake(0, 0, 320, 460)];
    [tableView setDelegate:self];
    [tableView setDataSource:self];
    [self.view addSubview:tableView];
    [tableView release];

    
	// Do any additional setup after loading the view.
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView 
{ 
    //* 出现几组
	//if(aTableView == self.tableView) return 27;
	return [arrayDict count]; 
}

//*字母排序搜索
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
    //* 字母索引列表
    /*NSMutableArray *toBeReturned = [[NSMutableArray alloc]init];
    
    for(char c= 'A';c<='Z';c++)
        
        [toBeReturned addObject:[NSString stringWithFormat:@"%c",c]];*/
    
    return arrayDictKey;
    
    /*NSMutableArray *newarr=[[NSMutableArray alloc]initWithArray:listarray];
    [newarr addObject:@"{search}"]; //等价于[arr addObject:UITableViewIndexSearch];
    return newarr;*/
    
}

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{  
    //搜索时显示按索引第几组 
    NSInteger count = 0;
    NSLog(@"%@",title);
    for(NSString *character in arrayDictKey)
    {
        
        if([character isEqualToString:title])
        {
            
            return count;
        
        }
        
        count ++;
        
    }
    
    return count;
    
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    
    /*if([listarray count]==0)
        
    {
        
        return @"";
        
    }*/
        
        //return [listarray objectAtIndex:section];   //*分组标签
    return [arrayDictKey objectAtIndex:section];
    
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    //return [self.listarray count];    //*每组要显示的行数
    //NSInteger i = [[listarray objectAtIndex:section] ]
   NSInteger i =  [[arrayDict objectForKey:[arrayDictKey objectAtIndex:section]] count];
    return i;
}

-(UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath{   
    //返回类型选择按钮  

    return UITableViewCellAccessoryDisclosureIndicator;   //每行右边的图标
}  
- (UITableViewCell *)tableView:(UITableView *)tableview 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    
    static NSString *TableSampleIdentifier = @"TableSampleIdentifier"; 
    
    UITableViewCell *cell = [tableview dequeueReusableCellWithIdentifier: 
                             TableSampleIdentifier]; 
    if (cell == nil) { 
        cell = [[UITableViewCell alloc] 
                initWithStyle:UITableViewCellStyleDefault 
                reuseIdentifier:TableSampleIdentifier];
    } 
    
    NSUInteger row = [indexPath row];
    NSUInteger sectionMy = [indexPath section];
    NSLog(@"sectionMy:%d",sectionMy);

    cell.textLabel.text = [[arrayDict objectForKey:[arrayDictKey objectAtIndex:sectionMy]] objectAtIndex:row]; //每一行显示的文字
    
    NSString *str=  [NSString stringWithFormat: @"%d", row];
 
    UIImage *image = [UIImage imageNamed:str]; 
    cell.imageView.image = image; 
    UIImage *highLighedImage = [UIImage imageNamed:@"1.png"]; 
    
    cell.imageView.highlightedImage = highLighedImage; //选中一行时头部图片的改变
	return cell; 
}
//划动cell是否出现del按钮
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    
    
	return YES;  //是否需要删除图标
}
//编辑状态(不知道干什么用)
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
forRowAtIndexPath:(NSIndexPath *)indexPath
{   
 
	[self viewDidLoad];
}

//选中时执行的操作
- (NSIndexPath *)tableView:(UITableView *)tableView 
  willSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSUInteger row = [indexPath row];
    if (row%2 == 0) {
        NSUInteger row = [indexPath row]; 
        NSString *rowValue = [listarray objectAtIndex:row]; 
        
        NSString *message = [[NSString alloc] initWithFormat: 
                             @"You selected %@", rowValue]; 
        UIAlertView *alert = [[UIAlertView alloc] 
                              initWithTitle:@"Row Selected!" 
                              message:message 
                              delegate:nil 
                              cancelButtonTitle:@"Yes I Did" 
                              otherButtonTitles:nil]; 
        [alert show]; 
       
    }
    return indexPath; 
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    //这里控制值的大小
    return 50.0;  //控制行高
    
}

总结:有些东西没用之前觉得这个会很难,很复杂,做过后才发现,其实关键在于理解,多看多实践这样才能提高...多看看我的demo,研究一下哈...

demo下载地址:http://download.csdn.net/detail/dongge_111/4329036

抱歉!评论已关闭.