当前位置: 首页 > 编程日记 > 正文

iOS小技巧积累

平时项目中用到的,记录下来(持续更新)。


1.在导航栏右边添加多个UIBarButtonItem

UIBarButtonItem *searchScheduleBtn = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"search_small"] style:UIBarButtonItemStylePlain target:self action:@selector(clickSearchSchedule)];
UIBarButtonItem *searchPersonBtn = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"search_small"] style:UIBarButtonItemStylePlain target:self action:@selector(clickSearchPerson)];
NSArray *btnArr = @[searchScheduleBtn,searchPersonBtn];
self.navigationItem.rightBarButtonItems = btnArr;

2.字符串分割

NSString *str = @"hello world !";
NSArry *arr = [str componentsSeparatedByString:@" "]; 

上面代码以空格作为分割依据,得到一个的count为3的arr,arr[0]-arr[2]分别为hello、world、!


3.数组合并成一个字符串:

NSArray *pathArray = [NSArray arrayWithObjects:@"hello",@"world", @"!", nil];  
NSString *str = [pathArray componentsJoinedByString:@" "];

上面使用空格来连接(即componentsJoinedByString的参数),合并后str的内容为hello world !


4.拨打电话的三种方法:

(1)NSURL *url = [NSURL URLWithString:@"tel://10086"];[[UIApplication sharedApplication] openURL:url];
(2)//拨打前弹框提醒、通话结束后回到应用,但是是私有apiNSURL *url = [NSURL @"telprompt://10086"];[[UIApplication sharedApplication] openURL:url];
(3)通过UIWebView[WebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"tel://10086"]]];

5.使得NavigationBar上按钮的图片颜色为原图颜色

添加到NavigationBar上的按钮的图片系统默认会显示为蓝色,如果要显示图片本身的颜色,只需要在选中图片,修改图中Render As的值为Original Image即可



6.给任意UIView设置圆角效果:

self.selectBtn1.layer.cornerRadius = 2.f;
self.selectBtn1.clipsToBounds = YES;

以上代码给selectBtn1按钮设置圆角大小为2.0的圆角效果,更多效果:http://blog.csdn.net/dolacmeng/article/details/45459145


7.在NSArry/NSMutableArry中存放int、bool等基本数据类型,只需包装为NSNumber

NSArray *arr1 = @[@"string",@YES,@100];//方法1
NSArray *arr2 = @[[NSNumber numberWithInt:100],[NSNumber numberWithBool:NO]];//方法2

8.导航栏添加自定义试图

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:customView;//其中customView为用户自定义的View,可以是UIButton、UILabel、UISwitch等等或者它们的组合
self.navigationItem.leftBarButtonItems = item;

9.给任意UIView子类实例添加点击事件

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]init];[tap addTarget:self action:@selector(clickMyView)];[myView addGestureRecognizer:tap];

10.给UILabel添加下划线(UIButton同理,获取button.titleLabel即可)

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 30)];
NSMutableAttributedString *content = [[NSMutableAttributedString alloc] initWithString:@"这是加了下划线的文字"];
NSRange contentRange = {0, [content length]};
[content addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleSingle] range:contentRange];
label.attributedText = content;
[self.view addSubview:label];

11.从NSString得到对应的Class

NSString *classStr = @"MyClass";
Class c = NSClassFromString(classStr);

12.加速CocoaPods install速度

如果使用CocoaPods来添加第三方类库,执行pod install或pod update都卡在了Analyzing dependencies不动,可以分别使用以下命令如下:

pod install --verbose --no-repo-update

pod update --verbose --no-repo-update

原因在于当执行以上加了参数的命令后,可以省略升级CocoaPods的spec仓库这一步,然后速度就会提升不少。


13.查看APPStore平均审核时间(打开速度比较慢,推荐使用vpn)

http://appreviewtimes.com


14.命令行启动Mac自带Apache服务器

sudo apachectl -k start


15.监听UITextfield编辑事件(开始、结束、字符改变)

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldTextDidChangeOneCI:) name:UITextFieldTextDidChangeNotification object:myTextfield];
以上代码接收UITextField实例myTextfield的字符改变事件,当文字改变时调用textFieldTextDidChangeObeCI:方法。最后一个参数为nil时,代表接受所有UITextField的事件,倒数第二个参数是事件名称,如UITextFieldTextDidBeginEditingNotification、UITextFieldTextDidEndEditingNotification、UITextFieldTextDidChangeNotification等

16.隐藏键盘

(1) [[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
(2)[self.view endEditing:YES];

17.复制文字到系统粘贴板

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
pasteboard.string = @"这里是要复制的文字";

18.去除UITableView多余的分割线
<pre name="code" class="objc">    self.tblExpandable.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

19. 使用KVC将json转模型时,如果json存在模型没有的字段,会crash,报setValue:forUndefinedKey错误,只需在模型.m文件中重写对应的方法即可

- (void)setValue:(id)value forUndefinedKey:(NSString *)key {NSLog(@"key = %@, value = %@", key, value);
}


20.Github .md使用网络图片:

![image](https://img-blog.csdn.net/20160418105818301)



21.设置textfiled的placeholder字体颜色

//方法1UIColor *color = [UIColor whiteColor];  _userName.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"用户名" attributes:@{NSForegroundColorAttributeName: color}];  //方法2 (kvc)
[_userName setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];

22通过runtime获取某个类的所有属性(如UIGestureRecognizer)

UInt32 count;
Ivar *ivars = class_copyIvarList([UIGestureRecognizer class], &count);
for (int i=0; i<count; i++) {NSString *name = [[NSString alloc] initWithCString:ivar_getName(ivars[i]) encoding:NSUTF8StringEncoding];NSLog(@"%@",name);
}

23.上传git时,分割大文件、合并文件

To split file named <inputfilename>: 
split -b50m inputfilename To put the files back together, in the terminal simply type: 
cat x* > outputfilename



相关文章:

(转)iPhone开发经典语录集锦

1&#xff1a;如果无法保证子类行为的一致性&#xff0c;那么就用委托 If the subClass cannt keep with superClass,use delegate rather than inheritance. 2:屏幕上看到的&#xff0c;都是UIVew Everything you see on Screen is UIView. 3:如果对性能要求高&#xff0c;慎…

varnish 实现 CDN 缓存系统构建

cdn 搭建 (server1:172.25.1.1 ) : [roottest1 ~]# ls varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm [roottest1 ~]# yum install * -y [roottest1 ~]# cd /etc/varnish/ [roottest1 varnish]# vim /etc/sysconfig/varnish [roottest1 varnish]# sysct…

创建第一个 local network(I) - 每天5分钟玩转 OpenStack(80)

在 ML2 配置文件中 enable local network 后&#xff0c;本节将开始创建第一个 local network。 我们将通过 Web GUI 创建第一个 local network。 首先确保各个节点上的 neutorn agent 状态正常。GUI 菜单 为 Admin -> System -> System Infomation -> Neutron Agents…

【Android】AsyncTask异步类

一、关于AysncTask AsyncTask使得多线程编程更加简单&#xff0c;AsyncTask能在后台线程执行异步任务&#xff0c;并且在UI线程更新界面&#xff0c;而不再需要用户去操作Thread和Handler。AysncTask是一个抽象类&#xff0c;类关系如下&#xff1a; public abstract class As…

高手速成android开源项目【blog篇】

主要介绍那些乐于分享并且有一些很不错的开源项目的个人和组织。Follow大神&#xff0c;深挖大神的项目和following&#xff0c;你会发现很多。 一、个人 JakeWharton 就职于SquareGithub地址&#xff1a;https://github.com/JakeWharton代表作&#xff1a;ActionBarSherlock&a…

3、LVS_TUN实现负载均衡

LVS_TUN实现负载均衡 LVS 介绍: LVS 是 Linux Virtual Server 的简称,在实际环境中经常作为 B/S 结构的网络应用中的负载均衡器来使用,工作在 7 层网络模型中的,网络层,也就是通常说的 IP 层,由于数据的处理是在 Linux 内核态完成的,所以相对反向代理服务器来说,性能一般会高一…

【Android】Fragment官方中文文档

以下内容来自Android官方文档。 Fragment 表示 Activity 中的行为或用户界面部分。您可以将多个片段组合在一个 Activity 中来构建多窗格 UI&#xff0c;以及在多个 Activity 中重复使用某个片段。您可以将片段视为 Activity 的模块化组成部分&#xff0c;它具有自己的生命周期…

关于MSSQL导入导出时主键与约束丢失的问题解决

导入数据时&#xff0c;使用默认选项&#xff0c;会丢失主键、约束、默认值等属性&#xff0c;按如下步骤操作&#xff1a;-->导出向导 -->选择数据源 -->选择目的 -->指定表复制或查询&#xff1a;不要使用默认选项&#xff0c;选择“在SQL Server数据库之间复制对…

Java5中的线程池实例讲解

Java5增加了新的类库并发集java.util.concurrent&#xff0c;该类库为并发程序提供了丰富的API多线程编程在Java 5中更加容易&#xff0c;灵活。本文通过一个网络服务器模型&#xff0c;来实践Java5的多线程编程&#xff0c;该模型中使用了Java5中的线程池&#xff0c;阻塞队列…

LNMP架构的搭建

LNMP 架构的搭建 基础架构图 环境&#xff1a; server5: nginx mysql php //需要的安装包 (蓝色为解压后的文件) [roottest5 ~]# /etc/init.d/iptables stop //关掉防火墙 MYSQL 源码安装 [roottest6 ~]#yum install -y gcc gcc-c make ncurses-devel bison opens…

NSString属性什么时候用copy,什么时候用strong?

我们在声明一个NSString属性时&#xff0c;对于其内存相关特性&#xff0c;通常有两种选择(基于ARC环境)&#xff1a;strong与copy。那这两者有什么区别呢&#xff1f;什么时候该用strong&#xff0c;什么时候该用copy呢&#xff1f;让我们先来看个例子。 示例 我们定义一个类…

hihocoder 1152 Lucky Substrings

#1152 : Lucky Substrings 时间限制:10000ms单点时限:1000ms内存限制:256MB描述 A string s is LUCKY if and only if the number of different characters in s is a fibonacci number. Given a string consisting of only lower case letters, output all its lucky non-empt…

随笔,记2014忆往昔岁月

博客园开通了一年多&#xff0c;这是第一篇博客。在此记下我的第一篇博客&#xff0c;同时&#xff0c;回忆过去几年自己的工作所得所想所感。 大学毕业&#xff0c;工作两年半了&#xff0c;做过很多事&#xff0c;比较杂&#xff0c;做过需求&#xff0c;做过设计&#xff0c…

PHP相关关系及定义

CGI(是一种协议): 是为了保证web server传递过来的数据是标准格式的&#xff0c;方便CGI程序的编写者。 web server&#xff08;如nginx&#xff09;是内容的分发者。 处理静态页面&#xff1a; 如果请求/index.html&#xff0c;web server就可以解…

Apache优化:修改最大并发连接数

http://www.365mini.com/page/apache-concurrency-configuration.htm Apache是一个跨平台的web服务器&#xff0c;由于其简单高效、稳定安全的特性&#xff0c;被广泛应用于计算机技术的各个领域。现在&#xff0c;Apache凭借其庞大的用户数&#xff0c;已成为用户数排名第一的…

黑马程序员___Java基础[02-Java基础语法](一)

Java语言基础组成 一、关键字 1)定义&#xff1a;被Java语言赋予了特殊含义的单词 2)特点&#xff1a;关键字中所有字母均为小写 3)作用及分类&#xff1a; 下面是Java语言保留专用的50个关键字&#xff1a; 用于定义数据类型的关键字&#xff08;12个&#xff09;&#xff1a;…

NSLog打印自定义对象

我们在开发中&#xff0c;如果直接使用NSLog打印对象&#xff0c;则会打印对象的指针&#xff08;如下图&#xff09; 但我们常常希望打印的是对象的属性的值&#xff0c;因此我们需要重写自定义类的description方法&#xff08;打印日志时&#xff0c;对象会收到description消…

数据库的安装与管理

数据库的安装与管理 1.mysql数据库的安装 yum install mariadb-server -y systemctl start mariadb ##开启数据库 netstat -antlupe | grep mysql ##查看端口 vim /etc/my.cnf ##修改配置文件。添加skip-networking1 systemctl restart mariadb ##重起服务 netstat -antlupe |…

SQL性能优化没有那么神秘

经常听说SQL Server最难的部分是性能优化&#xff0c;不禁让人感到优化这个工作很神秘&#xff0c;这种事情只有高手才能做。很早的时候我在网上看到一位高手写的博客&#xff0c;介绍了SQL优化的问题&#xff0c;从这些内容来看&#xff0c;优化并不都是一些很复杂的问题&…

腾讯云无法绑定公网IP问题解释与解决方案。

腾讯云无法绑定公网IP问题解释与解决方案。 http://blog.csdn.net/chenggong2dm/article/details/51475222 解释&#xff1a;公网IP并不直接配置在服务器上&#xff0c;而是在服务器外部的路由上&#xff0c;通过某种映射连接。 解决方案&#xff1a;绑定0.0.0.0 posted on 201…

iOS Category小举例

&#xff08;一&#xff09;Category作用&#xff1a;Category可以向已存在的类添加新的方法&#xff0c;或者覆盖原来类中已经存在的方法&#xff0c;从而扩展已有类&#xff08;在Java中为了实现类似功能&#xff0c;一般是创建子类&#xff09; &#xff08;二&#xff09;C…

memcache

nginxphpmemcache缓存 图解&#xff1a; [roottest5 ~]# /etc/init.d/iptables stop [roottest5 ~]# nginx [roottest5 ~]# /etc/init.d/php-fpm start Starting php-fpm done [roottest5 ~]# tar zxf memcache-2.2.5.tgz [roottest5 ~]# cd memcache-2.2.5 [roottest5…

iOS中KVO模式的解析与应用

最近老翁在项目中多处用到了KVO&#xff0c;深感这种模式的好处。现总结如下&#xff1a; 一、概述 KVO,即&#xff1a;Key-Value Observing&#xff0c;它提供一种机制&#xff0c;当指定的对象的属性被修改后&#xff0c;则对象就会接受到通知。简单的说就是每次指定的被观察…

C 到C++的升级

C所有的变量都可以在需要使用时再定义。 C语言中的变量都必须在作用域开始的位置定义。 register 关键字请求编译器将局部变量存储于寄存器中 在C语言无法获取register 变量的地址 在C中可以取得 register 变量的地址 C编译器有自己的优化方式&#xff0c;所以几乎不用registe…

SET QUOTED_IDENTIFIER OFF语句的作用

先看下面几个sql语句 1SETQUOTED_IDENTIFIER ON2SELECT*FROM"USER" WHEREanetasp34SETQUOTED_IDENTIFIER ON5SELECT*FROM[USER]WHEREanetasp67SETQUOTED_IDENTIFIER OFF8SELECT*FROM[USER]WHEREa"netasp" 910SETQUOTED_IDENTIFIER OFF11SELECT*FROM[USE…

proxy实现 mysql 读写分离

实现 mysql 读写分离 图解: 环境: iptables 和 selinux 关闭 proxy:test2 172.25.1.2 Master: test3 172.25.1.3 Slave:test4 172.25.1.4 环境已经实现 test3(master) 和 test4(slave) 的主从复制 Server2: [roottest2 ~]# ls mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz …

iOS开发中用到的一些第三方库

下面是我在开发中用到的一些优秀的iOS第三方开源库&#xff1a; 1.AFNetworking&#xff08;网络请求&#xff0c;类似的还有ASIHTTPRequest&#xff09; https://github.com/AFNetworking/AFNetworking/ 2.MBProgressHUD&#xff08;提示框&#xff09; https://github.…

小图标外链API

网页上有些分享的小图标&#xff0c;比如分享到facebook&#xff0c;weibo&#xff0c;qq空间等功能的时候&#xff0c;图标以前一般是自己做一个css sprite。当一个网站的图标变了的时候&#xff0c;比如facebook变成assbook的时候&#xff0c;你就要修改这个css sprite。费时…

转载JQuery 获取设置值,添加元素详解

转载原地址 http://www.cnblogs.com/0201zcr/p/4782476.html jQuery 获取内容和属性 jQuery DOM 操作 jQuery 中非常重要的部分&#xff0c;就是操作 DOM 的能力。 jQuery 提供一系列与 DOM 相关的方法&#xff0c;这使访问和操作元素和属性变得很容易。 提示&#xff1a;DOM …

mysql 主从复制 和基于gtid的mysql主从复制

主从复制 原理: mysql 无需借助第三方工具,而是其自带的同步复制功能,另外一点,mysql 的主从 复制并不是从硬盘给上文件直接同步,而是逻辑的 binlog 日志同步到本地的应用执行的过 程。 数据从一个 mysql 数据库(master)复制到另一个 mysql 数据库(slave),在 master 与 slave …