首页 > 代码库 > iOS_11_pinyin4objc汉字转拼音演示

iOS_11_pinyin4objc汉字转拼音演示

最终效果图:





ViewController.h

//
//  ViewController.h
//  PinYin4Objc汉字转拼音演示demo
//
//  Created by beyond on 14-7-26.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
// 输入框
@property (nonatomic,weak) IBOutlet UITextField *textFieldInput;
// 显示用时多少
@property (nonatomic,weak) IBOutlet UILabel *labelTime;
// 显示字数多少
@property (nonatomic,weak) IBOutlet UILabel *labelWordsCount;
// 结果显示框
@property (nonatomic,weak) IBOutlet UITextView *textFieldResult;

// 转换按钮
@property (nonatomic,weak) IBOutlet UIButton *btnOK;
- (IBAction)btnOKClick:(id)sender;
@end


ViewController.m

//
//  ViewController.m
//  PinYin4Objc汉字转拼音演示demo
//
//  Created by beyond on 14-7-26.
//  Copyright (c) 2014年 com.beyond. All rights reserved.


/*
 PinYin4Objc 是一个流行的汉字(支持简体和繁体)转拼音的objc库,有以下特性:
 1.效率高,使用数据缓存,第一次初始化以后,拼音数据存入文件缓存和内存缓存,后面转换效率大大提高;
 2.支持自定义格式化,拼音大小写等等;
 3.拼音数据完整,支持中文简体和繁体,与网络上流行的相关项目比,数据很全,几乎没有出现转换错误的问题。
 
 PinYin4Objc is a popular objective-c library supporting convertion between Chinese(both Simplified and Tranditional) characters and most popular Pinyin systems, it's performance is very efficient, data cached at first time. The output format of pinyin could be customized.
 
 性能比较:
 与之前的pinyin,POAPinyin和PYMethod等项目比较,PinYin4Objc的速度是非常快的
 
 声调格式化。例如:“刘”字的格式化后为“liu2”或“liu”或“liú”
 
 对特殊拼音ü的的显示格式。例如“u:”或“v”或“ü”
 
 大小写的转换。例如:“liu2”或“LIU2”
 
 设置声调格式:
 outputFormat.setToneType(HanyuPinyinToneType);
 参数HanyuPinyinToneType有以下常量对象:
 
 HanyuPinyinToneType.WITH_TONE_NUMBER 用数字表示声调,例如:liu2
 
 HanyuPinyinToneType.WITHOUT_TONE 无声调表示,例如:liu
 
 HanyuPinyinToneType.WITH_TONE_MARK 用声调符号表示,例如:liú
 
 
 设置特殊拼音ü的显示格式:
 
 outputFormat.setVCharType(HanyuPinyinVCharType);
 
 参数HanyuPinyinVCharType有以下常量对象:
 
 HanyuPinyinVCharType.WITH_U_AND_COLON 以U和一个冒号表示该拼音,例如:lu:
 
 HanyuPinyinVCharType.WITH_V 以V表示该字符,例如:lv
 
 HanyuPinyinVCharType.WITH_U_UNICODE 以ü表示
 
*/

#import "ViewController.h"
#import "PinYin4Objc.h"
@interface ViewController ()

@end

@implementation ViewController


// 点击按钮,转换汉字为拼音
- (IBAction)btnOKClick:(id)sender
{
    // 1,获取输入的文本
    NSString *inputText=_textFieldInput.text;
    // robust判断
    if ([inputText isEqual:@""]) {
        _labelTime.text= @"";
        _labelWordsCount.text = @"";
        _textFieldResult.text = @"";
        // 输入框活的焦点
        [_textFieldInput becomeFirstResponder];
        return;
    }
    // 2,实例化拼音格式化对象
    HanyuPinyinOutputFormat *outputFormat=[[HanyuPinyinOutputFormat alloc] init];
    // 3,设置拼音格式化对象的参数------重点
    /*
     typedef enum {
     ToneTypeWithToneNumber,数字1234表示声调
     ToneTypeWithoutTone,   没有声调
     ToneTypeWithToneMark   标记声调 这个用不了
     }ToneType;
     
     typedef enum {
     VCharTypeWithUAndColon,
     VCharTypeWithV,
     VCharTypeWithUUnicode
     }VCharType;
     */
    // 声调就是没有声调
    // [outputFormat setToneType:ToneTypeWithoutTone];
    // 声调是数字,跟在后面 海阔天空 <----->  hai3 kuo4 tian1 kong1
    [outputFormat setToneType:ToneTypeWithToneNumber];
    // 标记声调的这个用不了...
    // [outputFormat setToneType:ToneTypeWithToneMark];
    
    // V的表示方法:
    [outputFormat setVCharType:VCharTypeWithV];
    // V的表示方法:
    // [outputFormat setVCharType:VCharTypeWithUUnicode];
    // V的表示方法:
    // [outputFormat setVCharType:VCharTypeWithUAndColon];
    
    // 结果是大写还是小写,一般小写
    [outputFormat setCaseType:CaseTypeLowercase];
    // 4,记录转换的开始时间
    NSTimeInterval startTime=[[NSDate date] timeIntervalSince1970];
    // 5,拼音工具类的类方法转换汉字为拼音,参数1:输入的汉字,参数2:格式化器,参数3:seperator分隔符
    NSString *outputPinyin=[PinyinHelper toHanyuPinyinStringWithNSString:inputText withHanyuPinyinOutputFormat:outputFormat withNSString:@" "];
    // 6,记录转换的结束时间
    NSTimeInterval endTime=[[NSDate date] timeIntervalSince1970];
    // 7,计算用时
    NSTimeInterval totalTime=endTime-startTime;
    // 8,回显结果到界面
    _labelTime.text=[NSString stringWithFormat:@"共用时:%fs",totalTime];
    _labelWordsCount.text=[NSString stringWithFormat:@"字符数:%i 个",inputText.length];
    _textFieldResult.text=outputPinyin;
    NSLog(@"%@",outputPinyin);
    // 转换为秒
    // NSLog(@"seconds:%f",(endTime - startTime)/(float)CLOCKS_PER_SEC);
    
    
    
    
    
    
    // 调用自定义方法,退出键盘
    [self exitKeyboard];
    
}
// 自定义方法,退出键盘
- (void)exitKeyboard
{
    // 退出键盘
    // 方式1: self.view内部所有的文本框(包括子孙控件...)都退出第一响应者
    [self.view endEditing:YES];
    return;
    
    // 方式2:
    // 遍历uiview里面所有的控件 ,resignFirstResponder
    for (UIView *obj in self.view.subviews) {
        if ([obj isKindOfClass:[UITextField class]]) {
            [obj resignFirstResponder];
        }
    }
    // 方式3:
    // 在self.view的最开头,铺一个全屏的透明的按钮,连线,只要在屏幕空白区域点击后,就可以调用上面的方式1,退出键盘
}


@end








storyboard截图: