BOOL UIButton上的按钮选择

时间:2015-08-19 05:56:42

标签: ios objective-c iphone uitableview uibutton

我试图在基于JSON的布尔值时显示处于选中状态的按钮。这是我的自定义UITableViewCell的代码:

TwitterCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"TwitterCell"];

    if (cell == nil) {
        cell = [[TwitterCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"TwitterCell"];
    }

    NSDictionary *data = tweets[indexPath.row];

    id favorited = data[@"favorited"];
    NSLog(@"%@",favorited);
    id retweeted = data[@"retweeted"];
    NSLog(@"%@",retweeted);

    if ((int)favorited == 1) {
        [cell.favoriteButton select];
    } else {
        [cell.favoriteButton deselect];
    }

    if ((int)retweeted == 1) {
        [cell.retweetButton select];
    } else {
        [cell.retweetButton deselect];
    }

以下是我的自定义TableViewCell类中可能存在的问题。我准备重用的地方:

- (void)prepareForReuse
{
    [super prepareForReuse];
    self.favoriteButton.selected = NO;
    self.tweetLabel.text = nil;
    self.profilePicture.image = nil;
    self.nameLabel.text = nil;
    self.retweetButton.selected = NO;
    self.usernameLabel.text = nil;
}

2 个答案:

答案 0 :(得分:1)

您提供的代码存在一些问题。

1 - 将NSNumber投射到int

从字典中检索favorited(可能是数字)将返回NSNumber,这是数字的包装类。当你NSLog时,它将打印出description方法的结果,基本上打印出基础数字。

当您将NSNumber转换为int时,您不会获得基础数字,而是以整数格式获取内存地址。

请参阅此代码和一些示例输出:

NSNumber *favorited = @(1);
NSLog(@"%@", favorited);
NSLog(@"%d", (int)favorited);

favorited = @(0);

NSLog(@"%@", favorited);
NSLog(@"%d", (int)favorited);

输出

2015-08-19 07:04:36.235 xctest[589:7545] 1
2015-08-19 07:04:36.236 xctest[589:7545] 18
2015-08-19 07:04:36.236 xctest[589:7545] 0
2015-08-19 07:04:50.720 xctest[589:7545] 2

要检索基础数字,必须使用适当的*value方法之一,例如integerValuelongValue

2 - 呼叫selectdeselect

除非您已创建自定义子类,否则UIButton上不存在这些方法。要正确调整按钮的选定状态,您需要像prepareForReuse方法一样使用selected属性。

button.selected = YES; // or NO

全部放在一起

根据以上信息,我们可以更改部分细胞创建方法如下:

if ([favorited integerValue] == 1) {
    cell.favoriteButton.selected = YES;
} else {
    cell.favoriteButton.selected = NO;
}

if ([retweeted integerValue] == 1) {
    cell.retweetButton.selected = YES;
} else {
    cell.retweetButton.selected = NO;
}

答案 1 :(得分:0)

我认为问题在于

(int)favorited == 1

只需使用[favorited intvalue]即可。