汉字转拼音 繁体字 加音标的
今天分享一个可以将汉字转为拼音的 而且也可以加音标的类,
这个要感谢,那些巨人的肩膀啊
代码如下:
1 |
|
这个文件是需要一个库的,但是那位大神将库放在了图片里面,我觉得很牛叉,于是就这样用了,呵呵
使用方式如下
1 | $p = new Tpinyin; |
结果自己试试就知道了。
如果想控制音标的话,可以考虑是不是加载这个函数settune,有加的话,就会有音标的。
今天分享一个可以将汉字转为拼音的 而且也可以加音标的类,
这个要感谢,那些巨人的肩膀啊
代码如下:
1 | <?php |
这个文件是需要一个库的,但是那位大神将库放在了图片里面,我觉得很牛叉,于是就这样用了,呵呵
使用方式如下
1 | $p = new Tpinyin; |
结果自己试试就知道了。
如果想控制音标的话,可以考虑是不是加载这个函数settune,有加的话,就会有音标的。
apple官方对EKEventViewController是这么描述的
An EKEventViewController object displays the details of a calendar event. You can set whether users are allowed to edit the event. If the event is an invitation, where the organizer is not the user, you can set whether a calendar preview is shown.
EKEventViewController其实就是一个展示日历事件详情的视图控制器
官方的一段代码的实现是这样的:
1 | #pragma mark - |
并且他的实现过程是:
1 | #pragma mark - |
其实跟自己写一个viewcontroller的过程,然后自己再去调用是差不多的,少的是自己不用去写这个逻辑流程,还有就是,如果自己写的话是不是会有什么限制。我觉得应该不会有,不然也不会开放出来让大家使用。
scopeButtonTitles的使用很简单,就像吃苹果一样。
1 | - (void)viewDidLoad |
上面的代码APLProduct这个类你可以在这篇文章中找到答案。NSCoding解释 initWithCoder: encodeWithCoder:
更详细的可以看这里啦
昨天研究了UISearchBar,今天遇到了showsScopeBar问题, 还是继续说一下UISearchBar 吧
UIBarStyle barStyle
控件的样式id
delegate
设置控件的委托NSString *text
控件上面的显示的文字NSString *prompt
显示在顶部的单行文字,通常作为一个提示行NSString *placeholder
半透明的提示文字,输入搜索内容消失BOOL showsBookmarkButton
是否在控件的右端显示一个书的按钮(没有文字的时候)BOOL showsCancelButton
是否显示cancel按钮BOOL showsSearchResultsButton
是否在控件的右端显示搜索结果按钮(没有文字的时候)BOOL searchResultsButtonSelected
搜索结果按钮是否被选中UIColor *tintColor
bar的颜色(具有渐变效果)BOOL translucent
指定控件是否会有透视效果UITextAutocapitalizationType
autocapitalizationType
设置在什么的情况下自动大写UITextAutocorrectionType
autocorrectionType
对于文本对象自动校正风格UIKeyboardType
keyboardType
键盘的样式NSArray *scopeButtonTitles
搜索栏下部的选择栏,数组里面的内容是按钮的标题NSInteger selectedScopeButtonIndex
搜索栏下部的选择栏按钮的个数BOOL showsScopeBar
控制搜索栏下部的选择栏是否显示出来代理列表:
编辑代理
– searchBar:textDidChange:
– searchBar:shouldChangeTextInRange:replacementText:
– searchBarShouldBeginEditing:
– searchBarTextDidBeginEditing:
– searchBarShouldEndEditing:
– searchBarTextDidEndEditing:
点击按钮
– searchBarBookmarkButtonClicked:
– searchBarCancelButtonClicked:
– searchBarSearchButtonClicked:
– searchBarResultsListButtonClicked:
范围代理
– searchBar:selectedScopeButtonIndexDidChange:
searchBar的范围控件showsScopeBar,官方学名叫Scope Buttons。
首先就要设置这个属性:
self.searchBar.showsScopeBar = YES;
然后要给他添加按钮。比如说,这样:self.searchBar.scopeButtonTitles = [NSArray arrayWithObjects:@”BOY”,@”GIRL”,@”ALL”,nil];
还有一个很重要的事情就是我们要实现这个代理UISearchBarDelegate里的这个方法searchBar:selectedScopeButtonIndexDidChange:。告诉表格,你选择的范围是啥。
还有要是设置默认选择哪个按钮的话,要设置这个属性,像这样就是默认选中第1个啦。
self.searchBar.selectedScopeButtonIndex = 0;
1 | - (BOOL)searchDisplayController:(UISearchDisplayController *)controller |
1、为了将应用数据存储到硬盘中,iOS提供基本的文件API、Property List序列化、SQLite、CoreData以及NSCoding。对于轻量级的数据要求,NSCoding因其简单而成为一种比较合适的方式。 NSCoding是一个你需要在数据类上要实现的协议以支持数据类和数据流间的编码和解码。数据流可以持久化到硬盘。
2、是类对象本身数据的写入到本地文件。
我们需要实现两个方法: encodeWithCoder和initWithEncoder。encodeWithCoder就是编码,initWithCoder就是解码。 encodeWithCoder方法传入的是一个NSCoder对象,实现的时候我们就可以调用encodeObject、encodeFloat、 encodeInt等各种方法并通过指定键值进行编码。
APLProduct.m的代码如下
1 | #import "APLProduct.h" |
APLProduct.h的代码如下
1 | extern NSString *ProductTypeDevice; |
程序本地化是扩展应用市场的重要砝码.iOS提供了简便的方法来实现本地化,其中用的最多的就是NSLocalizedString.
首先查看下NSLocalizedString是什么:
1 | #define NSLocalizedString(key, comment) \ |
这里我们只看第一个
这是一个宏,本质上是调用了函数 locakizedStrigForKey:.这样,这个宏做的其实就是在当前bundle中查找资源文件名Localizable.strings
中键值key所指向的字符串.这样就不难理解还有诸如:NSLocalizedStringFromTable的宏了.
下面我们就来具体实现一下.
新建任一工程,然后添加新文件Localizable.strings
然后选择文件属性中的”Make File Localizable”,页面自然跳转,再选择”General”选项卡时就会发现”Add Localization”了.
默认有English,我们可以添加zh-hans ,然后在相应的文件中输入: “NAME” = “你好”,这样在代码中只需要简单的调用:
1 | nameLabel.text = NSLocalizedString(@"NAME",nil); |
此时在工程文件下出现了 *.lpjo的文件夹,下面安置了相应的本地化文件.由此可以判断,对于其他资源文件如图片,xib文件都可以进行本地化.
最后,我们再实现对程序名称的本地化.
在工程的info.plist文件的属性中选择”Make File Localizable”,然后会发现工程下出现InfoPlist.strings的文件,如法炮制,添加zh-hans,并在
相应的文件中添加”CFBundleDisplayName” = “中文名称” 即可.这样,你会发现你的机器上程序名称变成了中文.
PS:我还遇到一个问题,就是在本地化的时候语言代码是需要手工添加的,apple的文档上说所有的语言代码可以从ISO639( http://www.loc.gov/standards/iso639-2/php/English\_list.php)查询,可这个列表上中文对应的是chi/zho.而这显然没有区分简体和繁体中文.
dispatch_once
在ios中是用来创建单例的,具体为什么要创建单例,咱先不讨论,咱先看看,这个要怎么使用。
利用dispatch_once创建单例
在开发中我们会用到NSNotificationCenter、NSFileManager等,获取他们的实例通过[NSNotificationCenter defaultCenter]
和[NSFileManager defaultManager]
来获取,其实这就是单例。
我们先看下函数void dispatch_once( dispatch_once_t *predicate, dispatch_block_t block);
其中第一个参数predicate,该参数是检查后面第二个参数所代表的代码块是否被调用的谓词,第二个参数则是在整个应用程序中只会被调用一次的代码块。dispach_once函数中的代码块只会被执行一次,而且还是线程安全的。
接下来我们来实现自己的单例,这里有一个TestManager类,为这个类实现单例
1 | +(TestManager *)sharedInstance |
到目前为止,我们就实现了一个单例,一切就搞定了,是不是很简单!
使用就按照如下方式获取唯一实例即可:
1 | TestManager *testManager = [TestManager sharedInstance]; |
讨论dispatch_once函数实现单例的方法就这样结束啦,呵呵
今天看代码的时候,遇到了一个问号,跟自己没有好好学c有关的,或者是学了不用就忘记了。
1 | extern NSString *ProductTypeDevice; |
关键字extern于是就有了下文。
1,基本解释
extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
另外,extern也可用来进行链接指定。
2,问题:extern 变量
在一个源文件里定义了一个数组:char a[6];
在另外一个文件里用下列语句进行了声明:extern char *a;
请问,这样可以吗?
答案与分析:
1)、不可以,程序运行时会告诉你非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a
声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为extern char a[ ]
。
2)、例子分析如下,如果a[] = "abcd"
,则外部变量a=0x61626364
(abcd的ASCII码值),*a
显然没有意义
显然a指向的空间(0x61626364)没有意义,易出现非法内存访问。
3)、这提示我们,在使用extern时候要严格对应声明时的格式,在实际编程中,这样的错误屡见不鲜。
4)、extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。
4,问题:extern 函数2
当函数提供方单方面修改函数原型时,如果使用方不知情继续沿用原来的extern申明,这样编译时编译器不会报错。但是在运行过程中,因为少了或者多了输入参数,往往会照成系统错误,这种情况应该如何解决?
答案与分析:
目前业界针对这种情况的处理没有一个很完美的方案,通常的做法是提供方在自己的xxx_pub.h中提供对外部接口的声明,然后调用方include该头文件,从而省去extern这一步。以避免这种错误。
宝剑有双锋,对extern的应用,不同的场合应该选择不同的做法。
5,问题:extern “C”
在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,应该如何解决这种情况呢?
答案与分析:
C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。
下面是一个标准的写法:
1 | //在.h文件的头上 |
6, 问题:extern 函数1
常常见extern放在函数的前面成为函数声明的一部分,那么,C语言的关键字extern在函数的声明中起什么作用?
答案与分析:
如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显的区别:
extern int f(); 和int f();
当然,这样的用处还是有的,就是在程序中取代include “*.h
”来声明函数,在一些复杂的项目中,我比较习惯在所有的函数声明前添加extern修饰。
关于iOS6 UI状态保持和恢复,是最近看到几个例子,里面有这个方法encodeRestorableStateWithCoder
和decodeRestorableStateWithCoder
,感觉很奇怪,都怪自己知识浅薄啊
其实呢使用这个是有原因的.
iOS设计规范中要求,当应用退出的时候(包括被终止运行时候),画面中UI元素状态需要保持的,当再次进来的时候看状态与退出是一样的。iOS6之后苹果提供以下API使得UI状态保持和恢复变得很容易了。
在iOS6中我们可以在3地方实现状态保持和恢复:
1,应用程序委托对象
2,视图控制器
3,自定义视图
恢复标识是iOS6为了实现UI状态保持和恢复添加的设置项目。我们需要在应用程序委托对象AppDelegate代码部分做一些修改,添加的代码如下:
1 | -(BOOL) application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder |
其中application:shouldSaveApplicationState:
在应用退出的时候调用,负责控制是否允许保存状态,返回YES情况是可以保存,NO是不保存。
application:shouldRestoreApplicationState:
是应用启动时候调用,负责控制是否恢复上次退出的时候的状态,返回YES情况是可以恢复,NO是不恢复。
application:willEncodeRestorableStateWithCoder:
方法是保存时候调用,在这个方法中实现UI状态或数据的保存,其中[coder encodeFloat:2.0 forKey:@"Version"]
是保存简单数据。
application:didDecodeRestorableStateWithCoder:
方法是恢复时候调用,在这个方法中实现UI状态或数据的恢复,其中[coder decodeFloatForKey:@"Version"]
语句是恢复上次保存的数据。
要想实现具体画面中控件的保持和恢复,还需要在它视图控制器中添加一些代码,ViewController.m中添加的代码如下:
1 | -(void)encodeRestorableStateWithCoder:(NSCoder *)coder |
在iOS6之后视图控制器都添加了两个:encodeRestorableStateWithCoder:
和decodeRestorableStateWithCoder:
用来实现该控制器中的控件或数据的保存和恢复。其中encodeRestorableStateWithCoder:
方法是在保存时候调用,[coder encodeObject:self.txtField.text forKey:kSaveKey]
语句是按照指定的键保存文本框的内容,decodeRestorableStateWithCoder:
方法是在恢复时候调用,[coder decodeObjectForKey:kSaveKey]
是恢复文本框内容时候调用,保存和恢复事实上就是向一个归档文件中编码和解码的过程。
找了个觉得很稀奇的东西,不错,就是汉字转拼音的类库
1 | <?php |
axure rp pro 5.6 以上
用户名:IloveyouAxure
注册码:UChpuxwbDW6eAIaAf9UujEFSBwN3vpEz9snHvlCQVJGQy4p7WrCyKLLvV5QLvqva
我的是Axure RP Pro 6版本,key网上找的是5.6的,也能用