25个小技巧

(一)关于UITableView

方法flashScrollIndicators:这个很有用,闪一下滚动条,暗示是否有可滚动的内容。可以在ViewDidAppear或[table reload]之后调用。

点击Cell中的按钮时,如何取所在的Cell:

-(void)OnTouchBtnInCell:(UIButton )btn 

CGPoint point = btn.center; 
point = [table convertPoint:point fromView:btn.superview];

NSIndexPath indexpath = [table indexPathForRowAtPoint:point];

UITableViewCell *cell = [table cellForRowAtIndexPath:indexPath];

//也可以通过一路取btn的父窗口取到cell,但如果cell下通过好几层subview才到btn,就要取好几次 superview,所以我用上面的方法,比较通用。这种方法也适用于其它控件。

}

(二)设置线宽,如果是retina屏,lineWidth设为1,实际显示的宽度是2个像素,这里进行一下处理:

#define SETLINEWIDTH(ctx,w) CGContextSetLineWidth(ctx, w/[UIScreen mainScreen].scale)

(三)在CGContext中输出汉字:CGContextShowTextAtPoint是不支持汉字的,需要用NSString的drawAtPoint或drawInRect方法

(四)一个不停震动的方法:

// 定义一个回调函数,震动结束时再次发出震动

void MyAudioServicesSystemSoundCompletionProc (SystemSoundID ssID,void clientData) 

BOOL iShouldKeepBuzzing = clientData;

if (*iShouldKeepBuzzing) { AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

} else {

//Unregister, so we don‘t get called again...

AudioServicesRemoveSystemSoundCompletion(kSystemSoundID_Vibrate);

}

}

以下为调用的代码:

BOOL iShouldKeepBuzzing = YES;

AudioServicesAddSystemSoundCompletion (

kSystemSoundID_Vibrate,

NULL,

NULL,

MyAudioServicesSystemSoundCompletionProc,

&iShouldKeepBuzzing );

AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);

(五)关于更新,iPhone自动保存document中的内容,如果你把文件放在document中,以后开发又改了这个文件的内容或格式,那更新之后运行很可能出错。解决的办法是,配置文件放bundle里,或者改个文件名。每次更新前都要从App store 下载旧版本,运行一段一时间后,再此基础上编译新版,运行不出错才能上传

(六)初学者或者不小心容易犯的错误:在dealloc里要调用[super dealloc],千万不要调用[super release]

(七)需要调试的类最好重写description,输出重要变量的值,因为调试窗口variableView有时候变量值显示不出来。

(八)去掉app图标的发光效果:info.plist里增加Icon already includes gloss effects,值设为YES

(九)写代码时字符串太长 怎么换行:NSString *string = @"ABCDEFGHIJKL" \

"MNOPQRSTUVsWXYZ";

(十)UIImage:stretchableImageWithLeftCapWidth:topCapHeight: 有时图片模糊(blur)的原因:像素没有和device pixel对齐.使用instrument 的Core Animation可以检测这个,勾选"color misaligned images",如果图片显示为红紫色,就是没有对齐

(十一)UIPopoverController如果是用presentPopoverFromBarButtonItem显示的,设备旋转时,popover可以自动调整位置;如果是用presentPopoverFromRect显示的, 需要present again

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

{

[aPopover presentPopoverFromRect:targetRect.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

}

(十二)禁止textField和textView的复制粘贴菜单:

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender

{

if ([UIMenuController sharedMenuController]) {

[UIMenuController sharedMenuController].menuVisible = NO;

}

return NO;

}

(十三)时间相关

NSDate需要设置calendar,使用不方便也因为服务器传过来的是time_t格式,所以我在客户端对时间的操作主要用的C语言的方法。

需要注意的是,有的函数不是线程安全的,也就是说在同一个范围内调用多次时,需要调用线程安全的版本,这样的函数有:

localtime_r

asctime_r

ctime_r

gmtime_r

localtime_r

另外,可以直接给struct tm各成员变量赋值,例如(注意顺序)

struct tm tmStart = {second,minute,hour,day, mon, year};

struct tm的各成员是不能的加减的,因为超过了各变量的范围,可能出错,需要先转成time_t,再加减相应的时间

(十四) 如果重载loadView,一定要在这个方法里产生一个self.view。可以调用[super loadView],也可以使用alloc+init。

错误情况举例:loadView 直接调用self.view.alpha = 0.5; 因为self.view为nil,self.view.alpha这句又会调用loadView,也就是loadView不断调用loadView,进入了死循环

(十五)GestureRecognizer相关

1.一个View有GestureRecognizer又有按钮(或其它需要处理action event的控件)时,有时按钮不灵敏,解决办法:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

{

CGPoint pt = [touch locationInView:baseView];

UIView *btn = [baseView viewWithTag:TAG_MYBTN];

CGPoint ptInbtn = [baseView convertPoint:pt toView:btn];

return ![btn pointInside:ptInbtn withEvent:nil];

}

2.实现某个view点一下就移除时,要防止移除两次。(此方法适用于希望GestureRecognizer只执行一次的情况)

-(void)OnTapViewTobeRemoved:(UITapGestureRecognizer *)sender

{

if (!sender.enabled) {

return;

}

sender.enabled = NO;

[sender.view removeFromSuperview];

}

(十六)如何进入软件在app store 的页面:

先用iTunes Link Maker找到软件在访问地址,格式为itms-apps://ax.itunes.apple.com/...,然后

#define ITUNESLINK @"itms-apps://ax.itunes.apple.com/..."

NSURL *url = [NSURL URLWithString:ITUNESLINK];

if([[UIApplication sharedApplication] canOpenURL:url]){

[[UIApplication sharedApplication] openURL:url];

}

如果把上述地址中itms-apps改为http就可以在浏览器中打开了。可以把这个地址放在自己的网站里,链接到app store。

iTunes Link Maker地址:http://itunes.apple.com/linkmaker

(十七)someview显示一断时间后自动消失

[self performSelector:@selector(dismissView:) withObject:someview afterDelay:2];

这么写比用NSTimer代码少,不过哪种都行的,这里只是提供一种不同的方法

(十八)使提示窗口在任何界面都能显示:

[self.navigationController.view addSubview:(自定义的提示窗口)]

或用UIAlertView

(十九)禁止程序运行时自动锁屏

[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

(二十)判断一个字符串是否包含另一个字符串:

[str1 rangeOfString:str2].length != 0 ? @"包含" : @"不包含"

(二十一)没有用到类的成员变量的,都写成类方法

(二十二)navigationItem的backBarButtonItem的action是不会执行的.无论怎么改,除了popViewController什么都不执行。

例如:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(onComingback)];

self.navigationItem.backBarButtonItem= backButton;

在下一级视图中点“返回”,onComingback也是不会执行的。target和action都被忽略了,所以参数用nil就行了

要想在点“返回”时执行某段代码,只能自己做一个像返回按钮那样的UIBarButtonItem,图片是需要自己做的。self.navigationItem.leftBarButtonItem= custombackButton; // custombackButton的方法中包含popViewController和你想加的其它代码

(二十三)category可以用来调试。除了隐藏私有方法外,我主要用它截住函数。

例1:测试时我想知道TableViewCell有没有释放,就可以这样写

@implementation UITableViewCell(dealloc)

-(void)dealloc

{

NSLog(@"%@",NSStringFromSelector(_cmd));

// allSubviews是cookBook里的函数,可以取一个view的所有subView

NSArray *array = allSubviews(self);

NSLog(@"%@",array);

[super dealloc];

}

@end

其它的类也可以这样写,你随便输出什么

例2:我调试程序,觉得table的大小变了,想找到在哪改变的,这样做:

@implementation UITableView(setframe)

-(void)setFrame:(CGRect)frame

{

NSLog(%"%@",self);

[super setFrame: frame];

}

(二十四)当导入支付宝所有库和类的时候会报错12个,这时候需要在opeenssl.h和wrra.h文件导入#import<uikit.h>和#import<foundation.h>头文件

(二十五)设置按钮图片的时候可以使用setImageEdgeInsets方法。边距上下左右计算。

@end

时间: 2024-10-16 17:34:10

25个小技巧的相关文章

mysqldump - 给 DBA 的 25 个小技巧

本文作者是 NIVAS,原文地址是 mysqldump – 25 tips for DBAs mysqldump 是文本备份还是二进制备份 它是文本备份,如果你打开备份文件你将看到所有的语句,可以用于重新创建表和对象.它也有 insert 语句来使用数据构成表. mysqldump 的语法是什么? mysqldump -u [uname] -p[pass] –databases [dbname][dbname2] > [backupfile.sql] 使用 mysqldump 怎样备份所有数据库

Facebook内部分享:25个高效工作的小技巧

Facebook内部分享:25个高效工作的小技巧 Facebook 内部分享:不论你如何富有,你都赚不到更多的时间,你也回不到过去.没有那么多的假如,只有指针滴答的时光飞逝和你应该好好把握的现在,以下25张PPT的分享将为您带来时间价值管理的技巧. 1.时间常有,时间优先. 2.时间总会有的: 每天只计划 4-5 小时真正的工作. 3.当你在状态时,就多干点:不然就好好休息: 有时候会连着几天不是工作状态,有时在工作状态时却又能天天忙活 12 小时,这都很正常的. 4.重视你的时间,并使其值得重

Git 中级用户的25个小贴士

原文链接:25 Tips for Intermediate Git Users 作者:Andy Jeffries 时间:2009年11月1日 更新:这篇文章最初是在 2009年11月 发布到我的博客,它一直没有更新--不过有许多人发现这篇文章很有用,所以我想保持下去.请不要评论说"这些已经不再是中级小贴士了". 我使用 git 大约 18 个月了,以为自己已经比较了解 git 了.但当我们请 GitHub 的 Scott Chacon 来 LVS 公司(博彩/游戏软件开发商)做一些培训

移动端样式小技巧

平时在移动端开发拼页面的过程中总会遇到一些问题,主要是各手机webview样式显示效果不一致造成的.以下总结了一些常见坑和一些小技巧,希望对看官有所帮助! 本文只针对两大手机阵营 Android和IOS 中的魅蓝metal 和 iPhone6进行样式对比. 一.line-height line-height经常用于文字居中,当然也有小伙伴会用上下padding去写.but!不管你用padding还是line-height,不同手机显示效果还是-不一样. 一般会这样写 .demo{ height:

window.open的小技巧分享(转)

今天再次谈起window.open是因为发现了一个比较好玩的小技巧,详细内容我们稍后详细说明. 聊到window.open,不得不说明一下他的使用方法,主要有两种形式: window.open()没有任何参数,这种方式可以新标签打开页面 window.open(url, name, pars),带有参数的可以在当前页面打开窗口 详细的使用方法,之前有过介绍,如果想了解,可以点击这里. 知道了如何使用,接下来介绍几个特别的属性和方法(下面所说到的都是同域页面): window.open()打开的窗

[小技巧] gcc 编译选项-###

原文译至:http://elinux.org/GCC_Tips 的一小部分. -###编译选项用于查看编译的过程 gcc -### <你的命令行的其他部分放在这里> 你运行的GCC其是一系列工具的集合.通过这个参数,gcc能生成(但并不执行)一系列的命令用于完成你输入的任务.你可以看到在gcc编译下面的细节,什么库会被使用?-mcpu设成什么值?都在输出的结果中. 你可以将输出定向到一个文件并执行这个文件里的命令来编译程序,这样你可以更好地了解gcc是如何调用汇编器和链接器的. Reading

Python爬虫简单入门及小技巧

刚刚申请博客,内心激动万分.于是为了扩充一下分类,随便一个随笔,也为了怕忘记新学的东西由于博主十分怠惰,所以本文并不包含安装python(以及各种模块)和python语法. 目标 前几天上B站时看到一部很好玩的番剧,名字<笨女孩>,实际上是由同名的搞笑向漫画动画化的.大家都知道动画一般一周一更,很难满足我们的需求,所以我们就来编写一个爬虫,来爬取漫画咯. 那么本文的目标就是爬取<初音MIX>这部漫画(因为笨女孩我已经爬取过了>_<).这部漫画我记得是小学的时候看的,也是

POJ1251 Jungle Roads Kruskal+scanf输入小技巧

Jungle Roads The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was spent on extra roads between villages some years ago. But the jungle overtakes roads relentlessly, so the large road network is too expens

最强 Android Studio 使用小技巧和快捷键【非原创】

(发现本文是个很不错的文章,相当实用,特分享与大家.分享自:http://m.open-open.com/m/lib/view/1458715872710.html 特此声明,好记性不如烂笔头,market下来以备后用) 原文如下: 写在前面 本文翻译自 Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键. 根据这些小技巧的使用场景,本文将这62个小技巧分为常用技巧(1 – 28).编码技巧(29 –