iOS--通讯录(UITableViewController)
本文主要实现通讯录的部分功能(分组名、索引、分组的组名)等等功能:
废话不多说了,先上效果图:

在工程中需要导入一个plist文件,文件图如图:

工程目录文件如图:

工程程序如图所示:
RootTableViewController.h
#import <UIKit/UIKit.h> @interface RootTableViewController : UITableViewController
@property(strong,nonatomic) NSDictionary *dic;
@property(strong,nonatomic) NSArray *arrkeys;
@end
RootTableViewController.m
#import "RootTableViewController.h"
@interface RootTableViewController ()
@end
@implementation RootTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSString *path=[[NSBundle mainBundle] pathForResource:@"sortednames" ofType:@"plist"];
self.dic=[NSDictionary dictionaryWithContentsOfFile:path];
// NSLog(@"%@",self.dic);
// NSLog(@"%@",self.dic.allKeys);
// 字典排序 字典的输出是无序的, 需要排序
self.arrkeys=[self.dic.allKeys sortedArrayUsingSelector:@selector(compare:)];
// NSLog(@"%@",self.arrkeys);
// 唯一标识符
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"reuseIdentifier"];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - 每个组的数量
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return self.arrkeys.count;
}
#pragma mark - 组数列表
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSString *key=self.arrkeys[section];
NSArray *tempArr=self.dic[key];
// NSLog(@"%@",key);
return tempArr.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseIdentifier" forIndexPath:indexPath];
NSString *key=self.arrkeys[indexPath.section];
NSArray *tempArr=self.dic[key];
NSString *name=tempArr[indexPath.row];
cell.textLabel.text=name;
return cell;
}
#pragma mark - 返回行高的方法
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return ;
}
#pragma mark - 系统默认的开头关键字
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return self.arrkeys[section];
// return [NSString stringWithFormat:@"%c",(char)('A'+section)];
}
#pragma mark - 自定义自体大小的开头关键字
-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UILabel *lbl=[[UILabel alloc] init];
lbl.backgroundColor=[UIColor redColor];
lbl.tintColor=[UIColor yellowColor];
lbl.text=self.arrkeys[section];
lbl.font=[UIFont systemFontOfSize:30.0];
return lbl;
}
#pragma mark - 设置右边索引高度
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return ;
}
#pragma mark - 设置所有分区的标题的列表
-(NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
return self.arrkeys;
}
#pragma mark - 单选控制格式
-(UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row==) {
return UITableViewCellAccessoryCheckmark;
}
else if(indexPath.row==){
return UITableViewCellAccessoryDetailDisclosureButton;
}
else if(indexPath.row==){
return UITableViewCellAccessoryDisclosureIndicator;
}else{
return UITableViewCellAccessoryNone;
}
}
.........
@end
注:
通讯录中的各种属性和显示规格都在RootTableViewController.m里设置!!!
AppDelegate.h
#import <UIKit/UIKit.h>
#import "RootTableViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @end
AppDelegate.m
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window.rootViewController=[[UINavigationController alloc] initWithRootViewController:[[RootTableViewController alloc] initWithStyle:UITableViewStyleGrouped]];
return YES;
}
.......
@end
iOS--通讯录(UITableViewController)的更多相关文章
- iOS 通讯录空格
iOS 通讯录联系人出现 ASCII 码值为 160 的空格 NOTE: 这里的"空格"是指 在通讯录中取出的联系人中带有特殊空格 带有特殊空格的字符串 " ...
- iOS UITableViewCell UITableVIewController 纯代码开发
iOS UITableViewCell UITableVIewController 纯代码开发 <原创> .纯代码 自定义UITableViewCell 直接上代码 ////// #imp ...
- Xamarin.Forms读取并展示Android和iOS通讯录 - TerminalMACS客户端
Xamarin.Forms读取并展示Android和iOS通讯录 - TerminalMACS客户端 本文同步更新地址: https://dotnet9.com/11520.html https:// ...
- ios开发 UITableViewController
iOS中显示数据列表最常用的一个控件,支持垂直滚动 UITableView的两种内置样式UITableViewStylePlain UITableViewStyleGrouped 数据源(data ...
- iOS 通讯录-获取联系人属性
内容均来自关东升老师的ios开发指南 上一篇写了联系人框架的一些必须知道的知识 如今写一下读取联系人数据相关操作 要读取通讯录数据库 须要 创建通讯录对象 查询获取数据(全部或者部分) 获取通讯录某一 ...
- iOS通讯录相关知识-浅析
本文来自于:贞娃儿的博客 http://blog.sina.com.cn/zhenwawaer 在开发一些应用中,我们如果需要iPhone设备中的通讯录信息.或者,需要开发通讯录相关的一些功能.那 ...
- IOS 通讯录 (访问,添加,修改)
如何访问用户的通讯录 在iOS中,有2个框架可以访问用户的通讯录 AddressBookUI.framework 提供了联系人列表界面.联系人详情界面.添加联系人界面等 一般用于选择联系人 Add ...
- IOS通讯录的隐藏标签【电话】的特殊功能(在IOS11已失效)
这功能比较适合有强迫症,爱折腾的人哈!! 规范了通讯录标签,以后可以轻松的知道别人是用短号还是亲情网给你打电话. 如果是长号还可以显示归属地. 也许从IOS8(不太清楚)开始自带了号码归属地显示功能, ...
- IOS Swift UITableViewcontroller实现点击空白处隐藏键盘
在ios开发中,为了方便,我们经常使用UITableViewcontroller,比如搜索界面为了方便可能更多的使用UITableViewcontroller,那么问题就来了,当我点击搜索框的时候会弹 ...
- iOS 从UITableViewController中分离数据源
之前看objc.io #1 Light View Controllers看到一个非常不错的技巧:从UITableViewController中分离数据源,这样能够减小UITableViewContro ...
随机推荐
- UI自动化测试框架(项目实战)python、Selenium(日志、邮件、pageobject)
其实百度UI自动化测试框架,会出来很多相关的信息,不过就没有找到纯项目的,无法拿来使用的:所以我最近就写了一个简单,不过可以拿来在真正项目中可以使用的测试框架. 项目的地址:https://githu ...
- 一个有意思的js小问题
问题:如何实现以下函数? add(2, 5); // 7 add(2)(5); // 7 第一个就不用说了,很简单,关键是看第二个,add(2)(5),可见add(2)应该返回的是一个函数,这个函数再 ...
- 在MVC中使用async和await的说明
首先,在mvc中如果要用纯异步请不要使用async和await,可以直接使用Task.Run. 其次,在mvc中使用async和await可以让系统开新线程处理Task的代码,同时不必等Task执行结 ...
- 视图(View)与部分视图(Partial View)之间数据传递
写ASP.NET MVC程序,我们经常需要把数据从视图(View)传递至部分视图(Partial View) 或者相反. 今天Insus.NET使用 ControllerBase.TempData 进 ...
- SQL更改表字段为自增标识
下面是SQL语句: --删除主键约束 ) select @Constraint_Name = Name from dbo.sysobjects where Xtype = 'PK' and Paren ...
- webapi+entityframework分享
1. webapi允许跨域的增删改查要在web.config中加入以下文字 <system.webServer> <validation validateIntegratedMode ...
- 使用MySQL WorkBench导出数据库
1. 在MySQL WorkBench的Server Administrator中双击要连接的数据库: 2. 点击左边的Data Export,在右边的数据库列表中选择要导出的数据库: 3. Expo ...
- MySQL Workbench gnome-keyring-daemon错误的解决
在Fedora下安装了一个MySQL Workbench,运行,连接数据库,在Store in Keychain时出现了gnome-keyring-daemon错误,不能保存密码,也就连不上数据库. ...
- 怎样给Eclipse添加一个Xml模板
1.找到Window/Preferences/XML/XML Files/Editor/Templates 2.新建一个模板,设置一个名称并且在Pattern中设置自己的XML模板就可以了,同时支持导 ...
- 读书笔记系列之java性能优化权威指南 一 第一章
主题:java性能优化权威指南 pdf 版本:英文版 Java Performance Tuning 忽略:(0~24页)Performance+Acknowledge 1.Strategies, A ...