今天博主偶然遇到如題的問題,方法寫的沒錯,都是一一對應的,但就是不呼叫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