iOS自定义控件及相关iOS编程iOS && Android

利用runtime设置UITextField的Placehold

2016-03-17  本文已影响221人  MarkTang
Snip20160317_23.png

也就是说有setPlaceholder这个方法

下面我们就要利用runtime把我们写的方法和系统的setPlaceholder方法交换

首先新建一个UITextField的分类

然后 #import <objc/message.h>

//分类的代码
+ (void)load
{
     Method placeholder = class_getInstanceMethod(self, @selector(setPlaceholder:));
    
    Method placeBS_holder = class_getInstanceMethod(self, @selector(setBS_Placeholder:));
    
    method_exchangeImplementations(placeholder, placeBS_holder);

}
//这是设置颜色的方法
- (void)setPlaceholderColor:(UIColor *)placeholderColor
{
   //给系统的类增加一个属性,然后保存起来
    objc_setAssociatedObject(self, "placeholderColor", placeholderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    
    UILabel *placeholder = [self valueForKey:@"placeholderLabel"];
    
    placeholder.textColor = placeholderColor;
}

- (UIColor *)placeholderColor
{
    return objc_getAssociatedObject(self, "placeholderColor");
}

//交换方法的实现
- (void)setBS_Placeholder:(NSString *)placeholder
{
   //因为交换方法实现所以是调用了系统的方法
    [self setBS_Placeholder:placeholder];
    //再把颜色赋值
    self.placeholderColor = self.placeholderColor;
    
}
self.textadd.placeholderColor = [UIColor redColor];
    self.textadd.placeholder = @"你喜欢什么颜色?";

最后的效果:

Snip20160317_24.png
上一篇 下一篇

猜你喜欢

热点阅读