今天博主偶然遇到如题的问题,方法写的没错,都是一一对应的,但就是不调用set方法,百度了很多,有人说要强制写@synthesize,还有的说@property有没有写,之类的,既然重写了get,set方法,@property肯定是不会缺失的,都是一些不疼不痒的回答。
博主看了下写出来的效果,发现并非是所有的get,set方法都无效,对比了下,终于发现问题在哪里了,
举例说明:
.h中声明 /** * 值 */ @property(nonatomic,assign)CGFloat value; /** * 值为0时slider颜色 */ @property(nonatomic,strong)UIColor *preBackgroundColor; /** * 进度条setter方法 * * @param value 进度 */ - (void)setValue:(CGFloat)value; /** * 设置进度条底色 * * @param preBackgroundColor 颜色 */ - (void)setPreBackgroundColor:(UIColor *)preBackgroundColor; .m中实现 - (void)setValue:(CGFloat)value { _value = value; _sliderBtn.center = CGPointMake(_value * _baseView.bounds.size.width , _baseView.center.y); _lastSliderView.frame = CGRectMake(0, 0, _sliderBtn.center.x, 20); } - (void)setPreBackgroundColor:(UIColor *)preBackgroundColor { _preBackgroundColor = preBackgroundColor; _preSliderView.backgroundColor = _preBackgroundColor; }
value对应setValue
preBackgroundColor对应setPreBackgroundColor
property后的属性和set后面的命名必须一样,而且遵循驼峰式命名,错一个字母都不行,驼峰命名错了也不行。
假如:preBackgroundColor对应setpreBackgroundColor(p小写了),错误,无法调用,如果preBackgroundColor和setPreBackgroundColor中的PreBackgroundColor字母不一样也是不行的,只有后面带的参数是可以一样或者不一样的。
所以在重写set和get方法时一定要注意,小写错一个字母,大小写出错都不能成功调用。
想要查看具体使用的请看下篇博客,封装slider