专栏名称: Cocoa开发者社区
CocoaChina苹果开发中文社区官方微信,提供教程资源、app推广营销、招聘、外包及培训信息、各类沙龙交流活动以及更多开发者服务。
目录
相关文章推荐
苹果黑科技  ·  iOS ... ·  4 小时前  
苹果黑科技  ·  iOS ... ·  4 小时前  
51好读  ›  专栏  ›  Cocoa开发者社区

iOS 开发中你是否遇到这些经验问题(二)

Cocoa开发者社区  · 公众号  · ios  · 2016-08-24 08:49

正文

请到「今天看啥」查看全文


LRWeakSelf(shop);

shop.myBlock = ^{

//强引用

LRStrongSelf(shop)

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

NSLog(@"%@",shop.string);

});

};

shop.myBlock();


通过上面一堆的解释, 我们明显发现LRWeakSelf(shop);与LRStrongSelf(shop);一起使用的好处, 不但能打印出我想要的值,而且也不会造成循环引用 , 在开发中这两个方法可以根据实际情况进行使用!


2.使用UIAppearance注意的问题


如果不熟悉可以点击了解, UIAppearance它的目的就是设置全局显示样式, 我们知道只要带UI_APPEARANCE_SELECTOR这个宏, 我们就可以使用UIAppearance比如这样设置:



我们知道UIBarButtonItem它是有状态的比如UIControlStateNormal或者是UIControlStateDisabled状态


如果通过UIAppearance设置UIControlStateDisabled状态下的颜色是不好使的, 因为使用appearance会有一些延迟, 导致在不同状态下的颜色不好使, 我们只要强制刷新一下就可以了:


// 刷新

[self.navigationController.navigationBar layoutIfNeeded];


所以以后使用UIAppearance在某个状态下设置颜色,字体等不好使, 只需要在对应的位置用layoutIfNeeded刷新一下就可以了!


3. UITextField使用注意


先贴一个UITextField如何设置占位文字的颜色, 如果不先设置占位文字, 占位文字的颜色是不管用的:


//先设置占位文字

textField.placeholder = @"设置了占位文字内容以后, 才能设置占位文字的颜色";

//占位文字颜色

[textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];


大家监听UITextField文字的改变会用到代理:


#pragma mark -

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

//这里监听文字改变

return YES;

}


但是这个代理方法监听会有问题如下图:






所以我们要监听UITextField的文字改变不建议使用代理, 我们用addTarget监听文字


[textField addTarget:self action:@selector(textEditingChanged) forControlEvents:UIControlEventEditingChanged];


4.UITextView添加占位文字的正确方法


UITextView的占位文字属于它内部的一个功能, 我们在控制器或者用代理来处理占位文字一些功能是不合理的, 所以我们要自定义UITextView把相关内部的东西都封装起来!


(1)给外界提供占位文字与占位文字颜色:


/** 占位文字 */

@property (nonatomic, copy)NSString *placeholder;

/** 占位文字颜色 */

@property (nonatomic, strong)UIColor *placeholderColor;


(2)设置占位文字的默认值, 如果不设置默认值,外界不用你提供的方法会有崩溃现象:


// 设置默认字体

self.font = [UIFont systemFontOfSize:17];

// 设置默认的占位文字颜色

self.placeholderColor = [UIColor grayColor];


(3)内部添加占位文字的label ;


/** 占位文字label */

@property (nonatomic, weak) UILabel *placeholderLabel;

//懒加载

- (UILabel *)placeholderLabel

{

if (_placeholderLabel == nil) {

UILabel *placeholderLabel = [[UILabel alloc] init];







请到「今天看啥」查看全文


推荐文章