iOS-一些实用的小技巧

1. 全局隐藏tabbar黑色分割线

UITabBar.appearance().shadowImage = UIImage(named: "tabbarshadow")
UITabBar.appearance().backgroundImage = UIImage(named: "tabbarshadow")

2. 全局修改UITextField/UITextView光标颜色

//修改所有的UITextField 和 UITextView的光标颜色
UITextField.appearance().tintColor = kTYMainColor
UITextView.appearance().tintColor = kTYMainColor

3. 获取UISearchBar中的输入框

1.遍历子视图

UITextField *searchField = (UITextField *)[self subViewOfClassName:@"UISearchBarTextField" superView:self.mySearchBar];

/**
* @className:要查找的对象的类名
* @className:父视图
*/
- (UIView *)subViewOfClassName:(NSString *)className superView:(UIView *)superView {
    for (UIView *subView in superView.subviews) {
        if([NSStringFromClass(subView.class) isEqualToString:className]){
            return subView;
        }
        UIView *resultFound = [self subViewOfClassName:className superView:subView];
        if(resultFound){
            return resultFound;
        }
    }
    return nil;
}

2.使用谓词

- (UITextField *)kk_textField {
    NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(UIView *candidateView, NSDictionary *bindings) {
        return [candidateView isMemberOfClass:NSClassFromString(@"UISearchBarTextField")];
    }];
    return [self.subviews.firstObject.subviews filteredArrayUsingPredicate:predicate].lastObject;
}

3.KVC获取

UITextField *searchField = [self.searchBar valueForKey:@"_searchField"];

4. 解决子视图响应父视图手势

  1. 遵循代理<UIGestureRecognizerDelegate>
  2. 设置代理
UITapGestureRecognizer *dissTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(removeFromSuperview)];
dissTap.delegate = self;
[self addGestureRecognizer:dissTap];
  1. 实现代理
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
  if ([touch.view isMemberOfClass:[self class]]) {
      return YES;
  }
  return NO;
}

5. 对UIView切指定圆角

/**
 切指定圆角

 @param corners 指定位置
 @param clipRadii 圆角尺寸
 */
- (void)clipByRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)clipRadii {
    //使用layout进行布局,此时如果画圆角会因self.bounds不正常,导致无法显示圆角,所以需要提前更新UI,然后再画圆角
    [self setNeedsLayout];
    [self layoutIfNeeded];
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:corners cornerRadii:clipRadii];
    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
    maskLayer.frame = self.bounds;
    maskLayer.path = path.CGPath;   // 轨迹
    self.layer.mask = maskLayer;
}

6. 标记废弃方法名和属性

// 废弃属性
@property (nonatomic, copy, nonnull) void(^tapBlock)(QGGDataAipTargetListItem *item) __attribute__((deprecated("废弃")));
// 废弃方法
- (id)initWithFrame:(CGRect)frame DEPRECATED_MSG_ATTRIBUTE("使用 `-initWithItems:` 代替.");

// 还有其他的
__deprecated_msg("废弃了")
__attribute__((deprecated("废弃了")))

7. 自定义NSLog

#define KKLog(format, ...) NSLog(@"打印位置:%s,Line:%d --- " format, __FUNCTION__,  __LINE__, ##__VA_ARGS__);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • { 11、核心动画 需要签协议,但是系统帮签好 一、CABasicAnimation 1、创建基础动画对象 CAB...
    CYC666阅读 1,583评论 2 4
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,196评论 4 61
  • 我知道你潇洒, 知道你追求多样的人生, 也知道你可以驾驭各种风格。 只是,别在夜里喝酒。 这样伤身,而且你会哭泣。
    赢叶阅读 128评论 0 1
  • 今天是平安夜,据说,平安夜的晚上要吃一个苹果以保平安。我不知道一定要吃苹果的原因是什么,或许只是单纯的“平”字谐音...
    坚持的考拉阅读 264评论 0 0
  • 开发一款VR弹球游戏(下) 作者按:感谢大家对我的支持,甚至有出版社的主任跟我联系要出书,尤为受宠若惊。这个系列的...
    养薛定谔的猫阅读 1,779评论 6 13