大嗨鲜开发总结

2017-07-03  本文已影响0人  AmazingMasterYi

修改UITextField占位文字的颜色

@property(nullable, nonatomic,copy)   NSAttributedString     *attributedPlaceholder;
- (void)drawPlaceholderInRect:(CGRect)rect;
[textField setValue:[UIColor grayColor] forKeyPath:@"placeholderLabel.textColor"];

UITextField占位文字相关的设置

// 设置占位文字内容
@property(nullable, nonatomic,copy)   NSString               *placeholder;
// 设置带有属性的占位文字, 优先级 > placeholder
@property(nullable, nonatomic,copy)   NSAttributedString     *attributedPlaceholder;

枚举值的某个规律

UIControlEventEditingDidBegin                = 1 << 16,
UIControlEventEditingChanged                = 1 << 17,
UIControlEventEditingDidEnd                   = 1 << 18,
UIControlEventEditingDidEndOnExit        = 1 << 19,

通知相关的补充

使用block监听通知

// object对象发出了名字为name的通知, 就在queue队列中执行block
self.observer = [[NSNotificationCenter defaultCenter] addObserverForName:UITextFieldTextDidBeginEditingNotification object:self queue:[[NSOperationQueue alloc] init] usingBlock:^(NSNotification * _Nonnull note) {
    // 一旦监听到通知, 就会执行这个block中的代码
}];

// 最后需要移除监听
[[NSNotificationCenter defaultCenter] removeObserver:self.observer];

一次性通知(监听1次后就不再监听)

id observer = [[NSNotificationCenter defaultCenter] addObserverForName:UITextFieldTextDidBeginEditingNotification object:self queue:[[NSOperationQueue alloc] init] usingBlock:^(NSNotification * _Nonnull note) {


    // 移除通知
    [[NSNotificationCenter defaultCenter] removeObserver:observer];
}];

其他

dispatch_async(dispatch_get_global_queue(0, 0), ^{
    // 因为是在子线程注册了通知监听器, 所以beginEditing和endEditing会在子线程中执行
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(beginEditing) name:UITextFieldTextDidBeginEditingNotification object:self];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(endEditing) name:UITextFieldTextDidEndEditingNotification object:self];
});

巧用内边距

__OBJC 含义

#ifdef __OBJC__ 表示宏内引用的文件确保只被使用Objective-C语言的文件所引用,保证引用关系的清晰。因为项目中可能有C文件,然而C文件不识别部分OC代码关键字

上一篇下一篇

猜你喜欢

热点阅读