大嗨鲜开发总结

修改UITextField占位文字的颜色

  • 使用attributedPlaceholder
@property(nullable, nonatomic,copy)   NSAttributedString     *attributedPlaceholder;
  • 重写- (void)drawPlaceholderInRect:(CGRect)rect;
- (void)drawPlaceholderInRect:(CGRect)rect;
  • 修改内部占位文字Label的文字颜色
[textField setValue:[UIColor grayColor] forKeyPath:@"placeholderLabel.textColor"];

UITextField占位文字相关的设置

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

枚举值的某个规律

  • 凡是使用了1 << n格式的枚举值, 都可以使用|进行组合使用
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];
});

巧用内边距

  • 在处理一些控件的位置的时候,可以巧用内边距
    • imageEdgeInsets 图片内边距
    • titleEdgeInsets 文字内边距
    • contentEdgeInsets 所有内容内边距

__OBJC 含义

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • @(iOS 项目实战)[项目实战] 作者: Liwx 邮箱: 1032282633@qq.com 目录 04.项目...
    Liwx阅读 1,531评论 0 6
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • 夜深人静,我却怎么也睡不着,心里难受,很空很凉!没有人真正的关心我,关心我的内心,我很难过!真的好想哭,可能哭出来...
    元亨利真阅读 171评论 0 0
  • 追《猎场》,有时候里面大段的专业性台词一句都听不懂,不过,目前看到三十多集为止的七八段爱情故事却各有千秋啊。 罗伊...
    凉凉花骨朵阅读 578评论 0 0
  • 我和宝爸在还没结婚的时候就已经给大宝起好了名字。但婚还没结,一个和这个名字同名的人就忽然火了,成了名人。此名还没提...
    王耐思阅读 280评论 1 4