Cocoa学习

我的Cocoa/Cocoa Touch学习笔记

推View Controller时隐藏TabBar

设想一个场景,RootViewController是一个TabBarController,里面的子Controller是一个NavigationController。NavigationController的子ViewController在执行-pushViewController:animated:的时候,默认情况下,这个新的ViewController将会被UITabBar覆盖。

但是有时,我们希望推入这个新的ViewController的时候,TabBarController也被推走。要做到这一点其实很简单,只需要在这个新的ViewController上设置hidesBottomBarWhenPushed属性为YES

示例代码如下:

CodeBox风格的窗口打开动画

一直觉得CodeBox的窗口呈现动画很帅气--就是窗口Bounce了一下的那个效果。对了,就是NSAlert在OSX Lion下的显示的时候那个动画。我一直试图复刻那个动画,但是每次都灰头土脸的结束各种尝试。

今天搜索网络,在StackOverflow上找到了答案--事实上,我曾经多次无限接近正确答案,但最终还是没有成功。

本地化加载屏幕

我一直有注意到“大辞林”程序针对不同的系统语言,加载屏幕(Loading Screen,也称Splash Screen)是不一样的。因为无可治愈的拖延症,导致我从来没有想着去研究一下为什么。今天闲来无事,简单的弄了个程序做了一下,解决了加载屏幕本地化的问题。问题的答案只有一句话:

加载屏幕(Default.png)和其他的资源文件一样,可以在Xcode里直接设置本地化的!

(全文完) 等等,既然写成博文了,怎么可以这么就结束了呢!好吧,那就略微详细一点,看一下在Xcode 4.6中如何一步一步地把加载屏幕本地化。

用代码触发下拉更新

UIRefreshControl是iOS 6中的一个新控件,这个控件就是大家熟悉的下拉更新控件。关于如何把UIRefreshControl集成至UITableViewController中相信大家都知道怎么做。至于用代码触发下拉更新,查看Apple的文档后,我们看到UIRefreshControl有一个方法:- beginRefreshing。写到这里,貌似问题依然解决,没什么好说的了。但是真是这样吗?让我们来创建一个测试项目进行验证:

  1. 创建一个Master-Detail Application项目,取名“RefreshControl”(你可以随便取),设备选iPhone,够上“Use Automatic Reference Counting”和“Use Storyboards”(你也可以不用Storyboard,反正差不多)。

  2. (可选)打开MainStoryboard.storyboard(或MasterViewController.xib,如果你在1中没有勾选Use Storyboards),启用Master View Controller的Refreshing。

  3. 打开MasterViewController.m,更改代码如下:

iOS 6下的驾车导航

好久没有写Blog了,今天正好碰上了一个问题,于是决定写一写博客简单描述下。情况是这样的:之前,在iOS 5下,要显示一个从当前为止到目标位置的驾车导航可以使用如下的代码来搞定(参考这里):

1
2
3
4
//基于地名调用iOS自带的Google Maps导航
NSString *urlEncodedCurrentPlaceName = [@"当前位置" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; //简单起见,没有考虑多语言*(注)*。
NSString *mapLink = [[NSString alloc] initWithFormat:@"http://maps.google.com/maps?daddr=%@&saddr=%@", urlEncodedDestinationPlaceName, ];
[[UIApplication sharedApplication] openURL:[[NSURL alloc] initWithString:mapLink]];