iOS 开发小技巧

1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用)。

其实在代码里还是可以设置的,那就是删除背景view

[[self.searchBar.subviews objectAtIndex:0] removeFromSuperview];

2,NSDate:

[注意]在开发中,如果使用年月日,用NSDateFormatter setFormat :@"yyyy-MM-dd",如果是使用小时和分钟,设置为:"HH:mm",切记不要设置“HH-mm”,这样会出错的。

举例:

//创建一个时间对象

NSData * date = [NSDate date];

//打印时间

NSLog(@"today is %@",date);

//再获取的时间date减去24小时的时间(昨天的这个时候)

NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-(24*60*60)];

NSLog(@"yesterday is %@",yesterday);//打印昨天的时间

/*字符串换成时间*/

//设置一个字符串的时间

NSString *datestring = [NSString stringWithFormat:@"1999-09-03"];

//想要设置自己想要的格式,可以用nsdateformatter这个类,这里是初始化

NSDateFormatter * dm = [[NSDateFormatter alloc]init];

//指定输出的格式  这里格式必须是和上面定义字符串的格式相同,否则输出空

[dm setDateFormat:@"yyyy-MM-dd"];

//把字符串的时间转换成Date对象,用dateFromString方法

NSDate * newdate = [dm dateFromString:datestring];

//输出

NSLog(@"newdate is %@",newdate);

/*把时间转换成字符串*/

//把Date对象转换成String对象  用stringFromDate方法

NSString * datestring2 = [dm stringFromDate:newdate];

//打印

NSLog(@"datestring2 is %@",datestring2);

3,如果使用 UTTabviewCell,设置其accessory样式为:Detail Disclosure ,就是在每一个cell右边设置一个detail button。如果这样的操作是使用storyboard,进行的,它会要求你给每一个你cell设置indentifier,然后你会在以下方法内设置重用indentfier,别忘记加上一句话,否则编译运行时可能会弹出: cell未实例化

例子看网站上的。

4,在开发项目中,有时有这样的需求:运行程序,登陆界面是一个自由的ViewController,只是摆放几个TextField和button,点击后跳转到孩子选择或其它选择界面,点击选项后进入我们的主界面:这个时候,在登陆界面作跳转时,会有好多的方法,如果使用storyboard,就比较方便了,设置一个segue,跳转代码中:代码看网站上的

[self PerformSegueWithIdentifier:@"targetViewController",self]; 就可以了,可是我想实例化想要跳转的控制器,然后设置某一属性的值,这样跳转后控制器获取那个属性,就会得到值了,可是这样做会有一个问题:

主界面控制器如果使用了navigatorViewController,并且是其RootViewController,等到在主界面设置功能,点击某一功能,想push到一个新页面时,问题就来了,你会发现毫无反应,没有报错,只是segue无法跳转。后来终于找到原因:就是我在登陆控制器跳转时没有使用segue的方法,而是用代码self.storyboard,加载一个新类,具体原理目前还没有搞明白,先把出问题的代码记录下来,回头补之:看网站上的

代码这样做,会导致其后无法使用navigatorViewController做push跳转

5,(1010更新)开发过程中,我们通过http请求,后台返回json数据,而有时数据里某一字段的值为null~,然后我们把此值赋值给NSArray,NSdictionary,或是NSString,然后我们会判断此值为null时,所做的处理,而通常惯性思维判断时我们都会写:if(dict == nil)或是if(dict == Nil)或是if(dict == NULL)再或是if(dict isEqual nil),我们发现,都不好用,根本没有起到判断的作用~后来我才发现,原来不能这样来判断。

6,给uiview设置圆角样式只需在加载时,添加这样的话就可以了:testView.layer.cornerRadius = 6;        testView.layer.masksToBounds = YES;注意,需要 import导入,否则,不能识别cornerRadius和masksToBounds。

uiview设置背景图片:

[theMainView setBackgroundColor: [UIColor colorWithPatternImage: [UIImage imageNamed: @"bg.png"]]];

imageName 缓存,下面方法不缓存

NSString *thePath = [[NSBundle mainBundle] pathForResource:@"default" ofType:@"jpeg"];

UIImage *prodImg = [[UIImage alloc] initWithContentsOfFile:thePath"];

controller.productImg.image = prodImg;

[prodImg release];

7,隐藏键盘的两种方法

1-1Did End On Exit 调用下面事件当点击键盘return得时候就会隐藏键盘

- (IBAction)textFieldShouldReturn:(UITextField *)textField {

//[sender resignFirstResponder];

if (textField == chi) {

[chi resignFirstResponder];

double m=[chi.textdoubleValue]/3.003;

double f=m *3.2808;

meter.text=[[NSStringalloc] initWithFormat:@"%.4f",m];

feet.text=[[NSStringalloc] initWithFormat:@"%.4f",f];

}

if (textField == meter) {

[meter resignFirstResponder];

}

if (textField == feet) {

[feet resignFirstResponder];

}

}

1-2 点击屏幕得时候隐藏键盘

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

UITouch *touch=[[event allTouches] anyObject];

if (touch.tapCount >=1) {

[chi resignFirstResponder];

[meter resignFirstResponder];

[feet resignFirstResponder];

}

}

1-2的方法相当于屏幕任何位置的点击事件(除了各组件的点击处)可以在这个方法里执行要隐藏或remove的view。

8,UITextField密文显示输入内容

9,通过系统自带的NSPredicate使用正则表达式。(在TextField中)

[java] view plaincopy

NSString *regex =[NSString stringWithFormat:@"^1(3[4-9]|5[012789]|8[2378]|47)\\d{8}$"];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];

BOOL isMatch = [predicate evaluateWithObject:editPhoneField.text];

10,项目设置应用程序显示名称:

11更改Xcode的缺省公司名

12,在有uinavigation,uitoolbar的情况下,如何添加一个全屏的 uiview (一般是作为显示一个进度框,任何区域无法触摸而使用)

只需要在要添加view时侯这样写:

[java] view plaincopy

[[UIApplication sharedApplication].keyWindow addSubview:waitingview];

这样,直接把waitingview添加到了uiWindow上,而不是self.view上。再次运行,会发现屏幕全部区域都已经遮挡住了。

13,使用了storyboard,运行程序模拟器显示黑屏,这是由于,操作不当,获取点击了例如  navigationViewController属性种的in init ViewController选项,然后重置了当前进入程序后的首界面,解决办法就是选择入口界面,属性种重新勾选此选项。

14,如何给uiNavigationBar 设置背景颜色或是自定义图片?

在项目中添加如下代码:

//设置背景颜色:

[java] view plaincopy

UIColor *itemcolor = [UIColor colorWithRed:100.0f/255.0f green:176.0f/255.0f blue:0.0f/255.0f alpha:0.3f];

self.navigationController.navigationBar.tintColor = itemcolor;

//设置自定义的图片:

[java] view plaincopy

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbg.png"] forBarMetrics:UIBarMetricsDefault];

5.0以上,api有了上面setBackgroundImage的方法,可以直接设置,如果项目需要适配5.0以下版本的设备,最好加一个判读,是否有此函数,有则设置,没有就通过drawRect方法设置。

另外:设置背景图片无法匹配backButton或rightButtonItem,所以返回按钮或右边自定义的Bar button Item需要自行处理。

15,如何给uiview设置背景图片?

在storyboard或xib中,添加一个uiview,属性设置栏一般都有设置背景颜色,样式,透明度alpha,但是没有提供设置image,只有在imageview中才有,所以,要想设置背景图片,只能在代码中设置,如下:

[java] view plaincopy

[leftNaviView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"pabb_leftnaviview_bg.png"]]];

这样,背景就可以变成想要的图片了。另外,设置大小:

[java] view plaincopy

[leftNaviView setFrame:CGRectMake(9, 60, 120, 250)];

16如何在项目用代码打开AppStore软件(也就是访问appstore)

//以下是通过id打开此软件的评价

//        int m_appleID = 576337094;

//        NSString *str = [NSString stringWithFormat:

//                                @"itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=%d",

//                                m_appleID ];

//以下是通过appstore链接到自己应用在商店的位置

NSString *url = [NSString stringWithFormat:@"http://itunes.apple.com/cn/app/huo-xing-she-xin-dian/id549425594?l=en&mt=8"];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];

把以上代码直接拷贝到想要实现点击跳转的操作方法内就可以了,通过appID,随意可以通过appstore打开应用,直接用url就可以链接到了。很简单,一般都用在检查更新的时候。

17,如何代码实现点击http://www.kaka.com或400-800-400或message实现跳转safari,phone或message?

只需要在相应的代码中写入:

1、调用 电话phone

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://4008008288"]];

2、调用自带 浏览器 safari

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.abt.com"]];

3、调用 自带mail

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://admin@abt.com"]];

4、调用 SMS

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://800888"]];

5,跳转到系统设置相关界面

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=WIFI"]];

其中,发短信,发Email的功能只能填写要发送的地址或号码,无法初始化发送内容,如果想实现内容的话,还需要更复杂一些,实现其各自的委托方法。

若需要传递内容可以做如下操作:

加入:MessageUI.framework

代码看网站上的。

18,注册设置应用程序访问用户手机发送推送消息,(弹出Alertview)

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:

(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

19,轻松自定义复选框按钮

-(void)checkboxClick:(UIButton *)btn

{

btn.selected = !btn.selected;

}

- (void)viewDidLoad {

UIButton *checkbox = [UIButton buttonWithType:UIButtonTypeCustom];

CGRect checkboxRect = CGRectMake(135,150,36,36);

[checkbox setFrame:checkboxRect];

[checkbox setImage:[UIImage imageNamed:@"checkbox_off.png"] forState:UIControlStateNormal];

[checkbox setImage:[UIImage imageNamed:@"checkbox_on.png"] forState:UIControlStateSelected];

[checkbox addTarget:self action:@selector(checkboxClick:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:checkbox];

}

20,程序中获取软件的版本号和app名称

21,如何使屏幕一直保持唤醒状态?(就是不自动黑屏)

比如,如果我们做一个播放视频的功能时,想在播放的时候,不会自动进入屏保(黑屏)

只要在代码里加入这一行:

[java] view plaincopy

[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

当然,在想要黑屏的时候还需要把它设置为NO(比如视频播放完毕时),不然屏幕会在此软件运行下一直亮着。

22,一直以来的疑问:在Xcode中,有时候在类名称后边带有M或C等标示,不知道为何意。如下图所示:

23,有关ios上屏幕旋转,view设置Frame的相关问题(ios5)。

24,Xcode编译警告和错误解决方法:

25,如何设置视图(view)在最上层?或是view1和view2交换?

26,如何隐藏UINavigationBar

27,如何限制UITextField输入长度(监听textField文本变化的事件)

28,使用ios5.0以后的一个方法自定义table View Cell

29,iOS和iPad各app图标和启动页尺寸。

iphone APP图标尺寸:57X57    高清:114X114  单位:pixel  命名:无特殊要求,最好是,app_icon  高清的要加@2x

iphone 启动页尺寸:大小最好是320X460或320X480(相当于整个屏幕尺寸) 单位:pixel 命名:Default.png

iPad APP图标尺寸:72X72 高清:144X144  单位:pixel 命名:

ipad 启动页尺寸:大小最好是768X1004或768X1024  单位:pixel 命名:Default-Portrait~ipad.png  高清:Default-Portrait@2x~ipad.png

30,如何用NSLog输出NSRange,CGRect等结构体。

NSString 中的方法:

NSStringFromCGPoint

NSStringFromCGSize

NSStringFromCGRect

NSStringFromCGAffineTransform

NSStringFromUIEdgeInsets

如:NSLog(@"rect1: %@", NSStringFromCGRect(rect1));

31,如何在navigationviewcontroller中,pop到之前不同的viewcontroller(push过的viewcontroller)

32,self.navigationItem.backBarButtonItem 的title设置

33,self.navigationItem和self.navigationController.navigationItem的区别

1,  不要混淆 self.navigationItem  和 self.navigationController.navigationItem ,

UINavigationItem 本身是用来 定制 ViewController自己在被导航过程中的 appearence, navigationItem是UIViewController类关于UINavigationControllerItem类别的扩展:

@interface UIViewController (UINavigationControllerItem)

@property(nonatomic,readonly,retain)UINavigationItem * navigationItem;

...

@end

所以后者 是调用 VC的所在的导航控制器导航控制器自己自己作为VC的 navigationItem,是导航的叠加。

2. UINavigationBar 继承于 UIView,隶属于整个 UINavigationController ,用来定义整个导航过程中的导航栏的颜色等其他数值,(类似于 self.tabBarController.tabBar  UINavigationBar ,只需要一个设置通用的基本属性),只能通过self.navigationController.navigationBar来访问。

亦因此,定制于导航堆栈里某个VC 的时候,一般通过self.navigationItem,  比如常用的self.navigationItem.leftBarButtonItem,self.navigationItem.rightButtonItem, 同时如果自己来定制导航栏的外观的话,就要用到self.navigationItem.titleView,这个可以直接用一个 CustomView 赋值于self.navigationItem.titleView即可。

此时,如果需要,就得自己画导航过程中的返回按钮了。

34,图片模糊化处理

+(UIImage *)scale:(UIImage *)image toSize:(CGSize)size

{

UIGraphicsBeginImageContext(size);

[image drawInRect:CGRectMake(0, 0, size.width, size.height)];

UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return scaledImage;

}

35,NSString转换大小写的用法

iOS 6中NSString对象有些新的使用方法,可以让字符串转变成全部大写,全部小写,或者每个单词首字母大写。

NSString *str = @"mobile developer tips";

// Convert string to uppercase

NSString *upperStr = [str uppercaseStringWithLocale:[NSLocale currentLocale]];

NSLog(@"upperStr: %@", upperStr);

// Convert string to caps

NSString *capStr = [upperStr capitalizedStringWithLocale:[NSLocale currentLocale]];

NSLog(@"capStr: %@", capStr);

// Convert string to lowercase

NSString *lowerStr = [capStr lowercaseStringWithLocale:[NSLocale currentLocale]];

NSLog(@"lowerStr: %@", lowerStr);

运行结果:看网站上。

36,如何获取手机硬件信息?

通过使用UIDevice:

[[UIDevice currentDevice] systemName];

[[UIDevice currentDevice] systemVersion];//os version

[[UIDevice currentDevice] uniqueIdentifier];

[[UIDevice currentDevice] model];

[[UIDevice currentDevice] name];

真机上结果:

System Name: iPhone OS

System Version: 4.2.1

Unique ID: 9b5ded78d5fa0ac96250f8b4af0e46f40b96ea6d

Model: iPhone

Name: “wwk”的 iPhone

模拟器上结果:

System Name: iPhone OS

System Version: 4.2

Unique ID: 21FFE0FF-429B-5D0B-96D2-EADCA3203260

Model: iPhone Simulator

Name: iPhone Simulator

uniqueIdentifier:iPhone通过,向几个硬件标识符和设备序列号应用内部散列算法,而生成这一标识符。

http://blog.csdn.net/qiwancong/article/details/7914923 参考

36,真机调试:could not change executable permissions错误?

虽然更改了新demo的bundle identifier和之前的identifier一样,但是真机上还保留着之前调试时的demo,所以新的工程如果使用同样的identifier真机调试,需要先把机器上原来的demo删除,再使用新工程调试。

37,判断iphone5屏幕的宏定义

38、invalid deployment target for -stdlib=libc++ (requires iOS 5.0 or later)错误

39,如何调用系统声音?【iphone 调用系统铃声与震动功能】

40,重复调用2次loadView和viewDidLoad

41,点击UIButton 无法产生触摸事件

如果在UIImageView中添加了一个按钮,你会发现在默认情况下这个按钮是无法被点击的,需要设置UIImageView的userInteractionEnabled为YES:

imageView.userInteractionEnabled = YES;

设置为YES后,UIImageView内部的按钮就可以被点击了

42,如何启动app时全屏显示Default.png(图片)

42,使用ASIHTTPRequest保存cookies

假如我的APP,第一次启动请求了登录接口并得到了Cookie,然后我把APP关了,下次启动APP,我不请求登录接口了,那上次得到的Cookie就不存在了。如果需要,那么2种方法,下次启动app,自动登入,这样能得到服务器分配给你的cookier(这一种是最好的,因为session也会过期),还有一种是你把上次登入的时候,拿到的cookier存起来,然后下次启动app的时候,手动给请求(ASIHTTP)添加cookie。

43,UITextField只有当有字符输入后,键盘右下角的搜索/返回/done/等等键才可以使用

TextField设置这个属性为YES就可以了,默认为NO

searchField.enablesReturnKeyAutomatically = YES;

44、判断是不是iPhone5

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • 1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现cl...
    以德扶人阅读 2,333评论 2 50
  • 1.不可变数组转变为可变数组声明实例变量的数组 必须记得实现 对于遍历数组找到对象后 如果还需要查找 记得先结束 ...
    小新xin阅读 693评论 0 1
  • [self.navigationController.view addSubview:bgView]; 全屏的视图...
    child_cool阅读 269评论 0 0
  • iOS 常用小技巧大杂烩(上) 1,打印View所有子视图 po [[self view]recursiveDes...
    Mr_董阅读 371评论 0 0
  • iOS 开发小技巧(持续更新) 1.tableview中不显示没有内容的cell 4.ScrollView莫名其妙...
    着魔的毛豆阅读 425评论 0 0