文档章节

iOS tips随笔

哈哈8066
 哈哈8066
发布于 2015/03/06 20:31
字数 1658
阅读 137
收藏 0
点赞 0
评论 0

定义时候用到的strong weak copy assign等

/**
 copy : NSString\NSMutableString\block
 weak : 代理\UI控件
 strong : 其他OC对象
 assign : 基本数据类型(int\float)\枚举\结构体
 */

 

代理(delegate)用weak,delegate。 @property(nonatomic,weak) id delegate;
bool类型用assign。@property(nonatomic,assign) bool xxx ;
NSString用copy。@property(nonatomic,copy) NSString * xxx;

UI控件用weak:weak是弱指针,alloc的时候要先用强指针指着他。例如:(
    @property(nonatomic,weak) UILable *xxx ;

    UILable *xxx = [[UILable alloc] init];
    [self.contentView addSubview:xxx];
    self.xxx = xxx;


NSArray和NSMutableArray用strong,@property(nonatomic,strong) NSArray * xxx;
对象类型(class)用strong.
CGRect用assign,readonly。@property(nonatomic,assign,readonly) CGRect xxx ;

NSOperationQueue用strong。@property(nonatomic,strong) NSOperationQueue * xxx ;

——————————————————————————————————————————————————————————————————————————————

 

添加子控件


[self.contentView addSubview:xxxView]

——————————————————————————————————————————————————————————————————————————————

延迟动画(gcd实现)


延迟动画    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

        <#code to be executed after a specified delay#>

});

-(void)awakeFromNib{} 当xib文件加载好以后执行的方法

——————————————————————————————————————————————————————————————————————————————

获取主屏幕的宽度


[UIScreen mainScreen].bounds.size.width; 主屏幕的宽度。

——————————————————————————————————————————————————————————————————————————————

获取xib控件


xib向class拖线,应加上:
@interface MJAppCell()

@end

——————————————————————————————————————————————————————————————————————————————

测试注释预处理


#define MJLog(…) NSLog(__VA_ARGS__)
——————————————————————————————————————————————————————————————————————————————

UIApplication


UIApplication有个功能十分强大的openURL:方法
- (BOOL)openURL:(NSURL*)url;

openURL:方法的部分功能有
打电话
UIApplication *app = [UIApplication sharedApplication];
[app openURL:[NSURL URLWithString:@"tel://10086"]];

发短信
[app openURL:[NSURL URLWithString:@"sms://10086"]];

发邮件
[app openURL:[NSURL URLWithString:@"mailto://12345@qq.com"]];

打开一个网页资源
[app openURL:[NSURL URLWithString:@"http://ios.itcast.cn"]];

打开其他app程序

———————————————————————————————————————————————————————

“UISwitch”和“监听文本框改变”

1.UISwitch
* UISwitch继承自UIControl,因此也能像UIButton一样监听一些事件,比如状态改变事件
* UISwitch可以通过拖线监听状态改变
* UISwitch可以通过addTarget:...方法监听状态改变
- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
// 其中controlEvents参数传递的是:UIControlEventValueChanged(值改变事件)

/**
*  当一个switch的状态改变,另一个也跟着改
*/
- (IBAction)rememberPwdChanged {
    if (self.rememberPwdSwitch.isOn == NO) {    //on的getter方法是isOn, 具体如下:
//        self.autoLoginSwitch.on = NO;           //@property(nonatomic,getter=isOn) BOOL on;
        [self.autoLoginSwitch setOn:NO animated:YES];   //改变的时候加动画 duang
    }
}
- (IBAction)autoLoginChanged {
    if (self.autoLoginSwitch.isOn) {
//        self.rememberPwdSwitch.on = YES;
        [self.rememberPwdSwitch setOn:YES animated:YES];
    }
}



2.监听文本框的文字改变
* 一个文本输入框的文字发生改变时,文本输入框会发出一个UITextFieldTextDidChangeNotification通知
* 因此通过监听通知来监听文本输入框的文字改变
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:textField];
// textField文本输入框的文字改变了,就会调用self的textChange方法

 

———————————————————————————————————————————————————————

隐藏键盘

方法一:
    //1, 关闭键盘
    [[[UIApplication sharedApplication] keyWindow] endEditing:YES];

    //[self.view endEditing:YES];

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.view endEditing:YES];
}

 


方法二:
   //2, 关闭键盘

    //[self.xxx resignFirstResponder];//谁呼出的键盘,谁退出(不当第一响应者)
    [[self findFirstResponderBeneathView:self] resignFirstResponder];

- (IBAction)endKeyboard;    //退出键盘

- (IBAction)endKeyboard {
     [[[UIApplication sharedApplication] keyWindow] endEditing:YES];
}

 同样,当想呼出键盘的时候,就让空间成为第一响应者(becomeFirstResponder)

[self.xxx becomeFirstResponder];

———————————————————————————————————————————————————————

隐藏tableview分割线   

//隐藏tableview分割线
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

 

———————————————————————————————————————————————————————

归档获取文件路径

// 文件路径
#define taoContactsFilepath [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"contacts.data"]

———————————————————————————————————————————————————————

Modal的使用

1、跳转:

    [self presentViewController:nav animated:YES completion:^{
        NSLog(@"展示TwoViewController完毕.......");
    }];

2、跳回:

[self dismissViewControllerAnimated:YES completion:^{
        NSLog(@"关闭TwoViewController....");
    }];

———————————————————————————————————————————————————————

网络访问常用代码格式

NSURL *url = nil;
    NSURLRequest *requst = [NSURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:10.0f];
    // 新建一条线程,连接到网络,并等待返回数据
    [NSURLConnection sendAsynchronousRequest:requst queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
       
        // data就是从网络返回的数据
        // 对data处理
        // 重新回到主线程工作
        dispatch_async(dispatch_get_main_queue(), ^{
            // 更新UI
        });
    }];

 

———————————————————————————————————————————————————————

版本适配

[[UIDevice currentDevice].systemVersion floatValue] >= 7.0;

———————————————————————————————————————————————————————

计算按钮尺寸为 按钮字体的尺寸

- (void)viewDidLoad {
    [super viewDidLoad];
    
    UIButton *writePravateMessage = [[UIButton alloc] init];
    [writePravateMessage setTitle:@"写私信" forState:UIControlStateNormal];
    [writePravateMessage setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
    [writePravateMessage setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
    writePravateMessage.titleLabel.font = [UIFont systemFontOfSize:15];
    writePravateMessage.backgroundColor = [UIColor greenColor];
    
    //计算按钮尺寸为 按钮字体的尺寸
    //writePravateMessage.size = [writePravateMessage.currentTitle 
                                    sizeWithFont:writePravateMessage.titleLabel.font];
   
     writePravateMessage.size = [self 
                                sizeWithFontOrAttributes:writePravateMessage.titleLabel.font 
                                buttonVc:writePravateMessage.currentTitle];
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] 
                                                initWithCustomView:writePravateMessage];
}

/**
 iOS7以上用sizeWithAttributes,以下用sizeWithFont
 */
- (CGSize) sizeWithFontOrAttributes:(UIFont *) font buttonVc:(id) obj{
    if (iOS7) {
        NSDictionary *fontWithAttributes = @{NSFontAttributeName:font};
        return [obj sizeWithAttributes:fontWithAttributes];
    } else {
        return [obj sizeWithFont:font];
    }
}

 

———————————————————————————————————————————————————————

当前版本

NSString *lastVersion = KCFBundleVersionKey;

———————————————————————————————————————————————————————

 

UILable显示边框

1. 添加框架 QuartzCore.framework  

2. 引入头文件#import "QuartzCore/QuartzCore.h"

3. uilable.layer.borderColor = [UIColor lightGrayColor].CGColor;
  uilable.layer.borderWidth = 2.0;

———————————————————————————————————————————————————————

一个控件用肉眼看不见,有哪些可能

/*
 一个控件用肉眼看不见,有哪些可能
 1.根本没有创建实例化这个控件
 2.没有设置尺寸
 3.控件的颜色跟父控件的背景色一样(实际上已经显示了,只不过用肉眼看不见)
 4.透明度alpha <= 0.01
 5.hidden = YES
 6.没有添加到父控件中
 7.被其他控件挡住了
 8.位置不对
 9.父控件发生了以上情况
 10.特殊情况
 * UIImageView没有设置image属性,或者设置的图片名不对
 * UILabel没有设置文字,或者文字颜色和跟父控件的背景色一样
 * UITextField没有设置文字,或者没有设置边框样式borderStyle
 * UIPageControl没有设置总页数,不会显示小圆点
 * UIButton内部imageView和titleLabel的frame被篡改了,或者imageView和titleLabel没有内容
 * .....
 
 添加一个控件的建议(调试技巧):
 1.最好设置背景色和尺寸
 2.控件的颜色尽量不要跟父控件的背景色一样
 */

———————————————————————————————————————————————————————

程序启动会自动加载的图片

/*
 1.程序启动会自动加载叫做Default的图片
 1> 3.5inch 非retain屏幕:Default.png
 2> 3.5inch retina屏幕:Default@2x.png
 3> 4.0inch retain屏幕: Default-568h@2x.png

 2.只有程序启动时自动去加载的图片, 才会自动在4inch retina时查找-568h@2x.png
 */

——————————————————————————————————————————————————————————————————————————————————————————————

程序设置了UINavigationController,scrollview里面的视图有全部下移若干像素 解决方法

//自动调整滚动视图插入
self.automaticallyAdjustsScrollViewInsets = NO;

——————————————————————————————————————————————————————————————————————————————————————————————

NSData、 UIImage、ALAsset之间的关系和转化

//NSData转换为UIImage
NSData *imageData = [NSData dataWithContentsOfFile: imagePath];
 UIImage *image = [UIImage imageWithData: imageData];
//UIImage转换为NSData
NSData *imageData = UIImagePNGRepresentation(aimae);
//ALAsset提取UIImage
       UIImage *tempImg=[UIImage imageWithCGImage:asset.defaultRepresentation.fullScreenImage];

 

——————————————————————————————————————————————————————————————————————————————————————————————

UIButton超出UIView边界不可点击

当按钮超过了父视图范围,点击是没有反应的。因为消息的传递是从最下层的父视图开始调用hittest方法。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {  
    UIView *view = [super hitTest:point withEvent:event];  
    return view;  
}  

当存在view时才会传递对应的event,现在点击了父视图以外的范围,自然返回的是nil。所以当子视图(比如按钮btn)因为一些原因超出了父视图范围,就要重写hittest方法,让其返回对应的子视图,来接收事件。


- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {  

    UIView *view = [super hitTest:point withEvent:event];  

    if (view == nil) {  

    CGPoint tempoint = [btn convertPoint:point fromView:self];  

        if (CGRectContainsPoint(btn.bounds, tempoint))   

    {  

          view = btn;  

        }  

     }             

    return view;  

}  

 

——————————————————————————————————————————————

UIWebView 快速创建

UIWebView * webView = [[UIWebView alloc] init];
    webView.frame = CGRectMake(0, 20,
                               [UIScreen mainScreen].bounds.size.width,
                               [UIScreen mainScreen].bounds.size.height - 20);
    
    webView.backgroundColor = [UIColor lightGrayColor];

    [self.view addSubview:webView];
    
    NSURL *url = [NSURL URLWithString:@"urlString"];
    
    NSURLRequest * request = [NSURLRequest requestWithURL:url];
    
    [webView loadRequest:request];

 

——————————————————————————————————————————————

根据文字内容设置大小位置

CGRect rectToFit = [text boundingRectWithSize:CGSizeMake(240.0f, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:12.0f]} context:nil];

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
哈哈8066
粉丝 3
博文 41
码字总数 11565
作品 0
浦东
程序员
IOS12开发者预览版第二版使用评测

     手头有一部iPhone 6s Plus,因为之前看同学和朋友们升到IOS 11后手机变得非常卡顿所以没有升级。最近偶然看到IOS 12针对旧机型做了性能优化,号称提升70%相机打开速度、50%键盘显示...

张旭乾 ⋅ 前天 ⋅ 0

【AR】开始使用Vuforia开发iOS(2)

原 设置iOS开发环境 安装Vuforia iOS SDK 如何安装Vuforia iOS示例 编译并运行Vuforia iOS示例 支持iOS金属 iOS 64位迁移 设置iOS开发环境 适用于iOS的Vuforia引擎目前支持运行iOS 9及更高版...

lichong951 ⋅ 06/11 ⋅ 0

HDU ~ 6297 ~ CCPC直播 (模拟,输出格式控制)

思路:模拟就行了,注意Running和RTE的开头字母一样。 iomanip是I/O流控制头文件,就像printf的格式化输出一样。 以下是一些常用的: dec 置基数为10 相当于"%d" hex 置基数为16 相当于"%X" oc...

zscdst ⋅ 05/29 ⋅ 0

苹果对体无完肤的 iOS 11 最后的弥补

点击上方“CSDN”,选择“置顶公众号” 关键时刻,第一时间送达! 距离万众瞩目的苹果开发者大会(WWDC 2018)的召开还有不到一周时间,苹果公司于今天凌晨,正式发布了 iOS 11 的第十四次更...

csdnnews ⋅ 05/30 ⋅ 0

天生不凡ios怎么在电脑上玩 天生不凡ios电脑版玩法教程

天生不凡ios怎么在电脑上玩呢?现在有很多小伙伴都在玩天生不凡手游,不过相对于传统的在手机上进行游戏,很多人都倾向于新玩法,就是在电脑上玩天生不凡手游。下面小编就给亲们介绍下天生不...

kaopu8520 ⋅ 05/29 ⋅ 0

Dhar/YTTInjectedContentKit

YTTInjectedContentKit iOS壳版本场景下的批量修改类名、属性名、插入混淆代码、修改项目名称的shell脚本 具体的实现和使用方法请参考我的博客文章: iOS使用shell脚本注入混淆内容 iOS使用S...

Dhar ⋅ 05/04 ⋅ 0

苹果 WWDC 2018 重点推出 iOS 12

苹果正式宣布第 29 届年度全球开发者大会(WWDC 2018)将于美国当地时间 6 月 4 日星期一(北京时间 6 月 5 日凌晨一点)拉开帷幕,大会将持续到 6 月 8 日星期五。和 2017 年一样,此次会议...

问题终结者 ⋅ 04/15 ⋅ 0

又拍云Prism CDN 超低价 低延时 超强兼容的P2P-CDN

又拍云Prism CDN 超低价 低延时 超强兼容的P2P-CDN 2018-05-15 10:26编辑: 枣泥布丁分类:业界动态来源:https://www.upyun.com/products CDN又拍云 招聘信息: C++工程师 Cocos2d-x游戏客户...

枣泥布丁 ⋅ 05/15 ⋅ 0

iOS查看屏幕帧数工具--YYFPSLabel

学习 YYKit 代码时,发现 ibireme 在项目里加入的一个查看当前屏幕帧数的小工具,效果如下: 挺实用,实现方法也很简单,但是思路特别棒。 这里是Demo: YYFPSLabel 这里我把这个小工具从 中...

yehot ⋅ 2016/04/05 ⋅ 0

面试官自述:面向高级开发人员的iOS面试问题

当您准备进行技术性iOS面试时,了解您可能会询问哪些主题以及经验丰富的iOS开发人员期望什么是非常重要的。 这是许多硅谷公司用来衡量iOS候选人资历水平的一系列问题。 这些问题涉及iOS开发的...

菇哒微课 ⋅ 04/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 16分钟前 ⋅ 0

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 今天 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 今天 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 今天 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部