我还在学习IOS SDK,所以希望这是有道理的。我仍然试图用点语法来解决问题。有人可以解释为什么这个代码不起作用,但第二个代码呢?
不工作:
-(void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionView *cell = [collectionView cellForItemAtIndexPath:indexPath];
[[cell contentView] setBackgroundColor:[UIColor blueColor]];
}
工作:
-(void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionView *cell = [collectionView cellForItemAtIndexPath:indexPath];
cell.contentView.backgroundColor = [UIColor blueColor];
}
我只是不明白为什么第一个代码不能正常工作。我正在使用最新版本的Xcode。是否将setBackgroundColor方法弃用为其他内容?
答案 0 :(得分:1)
使用点表示法时,请务必记住不需要以任何方式更改属性名称。所以如果你说:
@property (nonatomic) NSString *message;
编译器会为您处理setter
和getter
方法,因此在此属性上使用点表示法所需要做的就是:
self.message; // getter
self.message = @"hi"; // setter
// the only difference being - which side of the = sign is your property at
另一方面,如果您想要更改setter / getter的行为,那么然后必须以下列方式定义setMessage
方法,以实现(而不是覆盖) )你自己的setter
:
- (void)setMessage:(NSString *)message {
// custom code...
_message = message;
}
也许这就是你困惑的事情。至于setBackgroundColor
,它仍然存在,你只是不使用点符号来访问它,顺便提一下,它允许各种各样的整洁的东西:
// .h
@property (nonatomic) int someNumber;
// .m
self.someNumber = 5; // calls the setter, sets property to 5
self.someNumber += 10; // calls the setter and getter, sets property to 15
self.someNumber++; // calls the setter and getter, sets property to 16