ios - 当你有多个按钮时,如何在 UITableView 中保持 UIButton 状态被选中?

标签 ios objective-c uitableview uibutton

我有一个包含按钮的 TableView 。我想要做的是,我想将点击的按钮保持在选定状态,直到再次点击它们(这应该取消选择它们)。老实说,这就像一个复选框。很简单,对吧?
但问题是,由于使用单个 bool 标志来查看按钮是第一次还是第二次被按下,事情变得一团糟。例如我点击按钮一,然后我点击按钮二,现在我想取消选择按钮一所以我再次点击它但它没有取消选择因为标志设置为是(虽然它确实取消选择再次点击)。

有没有一种方法可以避免这种情况,并且只需单击一下就可以达到预期的效果? 屏幕截图:http://i60.tinypic.com/1z51653.png 这就是我正在做的:

-(void) btnStateChanged: (UIButton *) btnProblem
{
    static BOOL btnPressedFirstTime=YES;
    if(btnProblem.selected==YES || btnProblem.highlighted==YES)
    {
        if(btnPressedFirstTime==YES)
        {
            [btnProblem setBackgroundImage:[UIImage imageNamed:@"sc123_button_hover"] forState: UIControlStateNormal];
            btnPressedFirstTime=NO;
        }
        else if(btnPressedFirstTime==NO)
        {
            [btnProblem setBackgroundImage:[UIImage imageNamed:@"sc123_button"] forState: UIControlStateNormal];
            btnPressedFirstTime=YES;
        }
    }
    [[NSUserDefaults standardUserDefaults] synchronize];
}

最佳答案

用描述每个按钮状态的对象启动一个数组。假设您有 10 个按钮:

NSMutableArray *buttonStates = [NSMutableArray new];

for (int i = 0; i < 10; i++)
{
    [buttonStates addObject:[NSNumber numberWithBool:NO]];
}

现在,当您单击 2 号按钮时(请注意,您必须使用其所在行的索引标记按钮):

- (void)btnStateChanged:(UIButton *)btnProblem
{
    int buttonIndex = btnProblem.tag;
    BOOL state = [[buttonStates objectAtIndex:buttonIndex] boolValue];
    [buttonStates replaceObjectAtIndex:buttonIndex withObject:[NSNumber numberWithBool:!state]];
}

这样你总能知道每个按钮的状态。

关于ios - 当你有多个按钮时,如何在 UITableView 中保持 UIButton 状态被选中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25785803/

相关文章:

ios - 通知发出声音但不显示任何内容

ios - 快速获取PHAsset信息?

ios - 从vimeo URL Objective-C中提取Vimeo视频ID

objective-c - 将 AVAudioPlayerDelegate 设置为 self 会给我一个警告

ios - 如何基于另一个数组对象从数组中删除对象

ios - NSArray 查找对象 - 最佳实践

ios - 从 UITableView 中删除自定义行

iphone - 重新加载没有动画的 UITableView

iphone - 如何锁定 UITableView 中的标题/标题

android - 我在退出 React Native 应用程序时遇到问题