在这一个项目中,所用到的第三方部分是用cocoapod下载的.在podfile中,键入以下代码:
pod 'FMDB'
pod 'MJRefresh'
pod 'AFNetworking'
如果你想用cocoapod下载某一个第三方的SDK却不知道名字是什么,那么你可以在终端键入以下代码:
pod search `关键字`
在这个项目,有一个分享功能,我是用shareSDK来实现分享功能,因为代码已经封装好了,所以使用起来非常简单.如何使用shareSD呢?在这里我就不作说明了,大家可以到http://wiki.mob.com/快速集成指南/这里查看.
如果你要做的项目是需要在Appstore上架的话,那么个人建议不要用类似于shareSKD或者友盟SDK这种第三方,因为在上架时可能会因为某些广告问题而被拒.因此推荐直接到官网去下载对应的SDK,如:腾讯开发者平台
http://wiki.open.qq.com/wiki/website/SDK下载下载TencentAthorOpenAPI
.
我用的是:
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@"dictionary" ofType:@"sqlite"];
来获取数据库的路径,但是一开始却怎样都获取不了数据库中的数据,排查错误后,发现是数据库文件在项目中的存放位置不正确.如下图所示:
在mainBundle中查找文件,必须把文件放到根目录下.如下图:
1.在pinyin表中,前26项是不需要显示在tableView中的,而且相同字母开头的要放在tableView中的同一个分区中,这时候就需要在数据库进行查找数据的操作中进行处理.我使用的是大数组套小数组的方法,截取查找出来的字符串string的第一个字符c,如果字符c与26个字母的其中一个相同,就加进alphbetArray中
NSMutableArray *alphabetAry = [NSMutableArray array];
Model *m1 = [[Model alloc] init];
Model *m2 = [[Model alloc] init];
for (int i = 0; i < 26; i++) {
m1 = array[i];
tmpArray = [NSMutableArray array];
for (int j = 26; j < array.count; j++) {
m2 = array[j];
if ([m1.py_pinyin isEqualToString:[m2.py_pinyin substringWithRange:NSMakeRange(0, 1)]]) {
[tmpArray addObject:array[j]];
}
}
[alphabetAry addObject:tmpArray];
2.每一次的查询,都会把查询的字加入到最近搜索表(Search)中.一开始,我直接在dictionary.sqlite进行insert操作,然后就会报一个no such table的错误提示.于是我改为新建一个数据库,将这一些操作在新建的数据库中执行,即每次进行数据库的增,删,改操作时,都调用以下方法:
+(BOOL)creat{
BOOL flag = NO;
NSString* docsdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString* dbpath = [docsdir stringByAppendingPathComponent:@"user.sqlite"];
FMDatabase* db = [FMDatabase databaseWithPath:dbpath];
[db open];
NSString *sqlCreateTable = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@' ('simp' TEXT,'pinyin' TEXT, 'bushou' TEXT, 'bihua' TEXT)",COLLECTION];
if ([db open]) {
flag = [db executeUpdate:sqlCreateTable];
[db close];
}
return flag;
}
3.向Search表和collection表中插入数据,如果将要插入的数据已经存在,那么放弃当前的插入操作.
BOOL flag = NO;
[DetailModel createSearch];
NSArray *array = [DetailModel findFromSearch];
if (array.count != 0) {
for (int i = 0; i < array.count; i++) {
DetailModel *DM = array[i];
if ([simp isEqualToString:DM.simp]) {
return flag;
}
}
}
title
字段,那么相对应地就要有:@property (nonatomic,strong) NSString *title;
+(void)netWorkWithPath:(NSString *)path Params:(NSDictionary *)params CallBack:(CallBack)callback{
path = [DomainString stringByAppendingString:path];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:path parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
callback(responseObject,SuccessType);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSDictionary *info = [NSDictionary dictionaryWithObjectsAndKeys:error.debugDescription,@"info", nil];
callback(info,FailedType);
}];
}
执行网络语法方法后,如成功即SuccessType;如失败即FailedType.然后用这两个type进行逻辑处理即可.
索引表的话,IOS也有属于自己的索引表,但是系统的索引表并不能满足我们.那我们怎么做呢?
自定义一个imageView
,并在上面设置按钮,点击按钮跳转至对应的分区.
scrollToRowAtIndexPath
方法.[myTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:分区位置]
atScrollPosition:UITableViewScrollPositionTop animated:YES];
在这项目中,我需要用到楷体用为UILabel的字体.但是系统提供的字体中并没有楷体,这时候就需要用第三方字体了,那我们应该怎么做呢?
Step1:下载楷体的ttf文件,导入项目中.Tips:字体下载地址http://font.niutuku.com/TTF/
Step2:在Info.plist文件中,添加新项Fonts provided by application,再新增一个items,即下载的ttf文件名
使用ios自带的多媒体播放声音.由于播放声音时会卡UI,所以要用多线程的方式播放声音.
#import
-(void)playSoundAction:(UIButton *)sender{
[NSThread detachNewThreadSelector:@selector(soundAction) toTarget:self withObject:nil];
}
-(void)soundAction{
AVSpeechUtterance *utterance = [AVSpeechUtterance
speechUtteranceWithString:self.sound];
utterance.voice=[AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CN"];//设置语言
utterance.volume = 0.5;
utterance.rate = 0.01;
utterance.pitchMultiplier = 1.0;
AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc] init];
[synth speakUtterance:utterance];
}
在iphone6 plus上布局最为困难,用简单的frame布局不能满足需求,因此需要AutoLayout与frame相结合.
分享至QQ,QQ空间等,需要添加白名单.方法为在Info.plist中加入以下代码:
<array>
<dict>
<key>CFBundleTypeRolekey>
<string>Editorstring>
<key>CFBundleURLNamekey>
<string>QQstring>
<key>CFBundleURLSchemeskey>
<array>
<string>QQ41DB72F4string>
array>
dict>
array>
在文本框中输入单个汉字,部首,拼音,都可得到对应的查询结果.难点:如何检测用户输入的是单个汉字?还是部首?还是拼音?
<1>.检测用户输入的是汉字还是拼音
NSString *string = [textField.text substringToIndex:1];
const char *cString = [string UTF8String];
if (strlen(cString) == 3) {
if (textField.text.length != 1) {
[[[UIAlertView alloc] initWithTitle:@"注意" message:@"请输入单个汉字" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil] show];
flag = NO;
return flag;
}
}
<2>检测用户输入是否为部首
NSArray *array = [Model findBushou];
if([textField.text isEqualToString:m.title]){...}
- (UIImage *) captureScreen {
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
CGRect rect = [keyWindow bounds];
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[keyWindow.layer renderInContext:context];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}