3

我仍在学习 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 方法是否已弃用为其他方法?

4

1 回答 1

1

当您使用点表示法时,请始终牢记您不需要以任何方式更改属性名称。所以如果你说有:

@property (nonatomic) NSString *message;

编译器会为您处理settergetter方法,因此您只需在此属性上使用点符号即可:

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
于 2013-05-15T22:11:44.150 回答