/** 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]
——————————————————————————————————————————————————————————————————————————————
延迟动画 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向class拖线,应加上:
@interface MJAppCell()
@end
——————————————————————————————————————————————————————————————————————————————
#define MJLog(…) NSLog(__VA_ARGS__)
——————————————————————————————————————————————————————————————————————————————
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://[email protected]"]];
打开一个网页资源
[app openURL:[NSURL URLWithString:@"http://ios.itcast.cn"]];
打开其他app程序
———————————————————————————————————————————————————————
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分割线
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
———————————————————————————————————————————————————————
// 文件路径
#define taoContactsFilepath [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"contacts.data"]
———————————————————————————————————————————————————————
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;
———————————————————————————————————————————————————————
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屏幕:[email protected]
3> 4.0inch retain屏幕: [email protected]
2.只有程序启动时自动去加载的图片, 才会自动在4inch retina时查找[email protected]
*/
———————————————————————————————————————————————————————
//自动调整滚动视图插入
self.automaticallyAdjustsScrollViewInsets = NO;