UISwitch由系统和用户打开和关闭

时间:2014-03-20 21:03:38

标签: ios ios7 uiswitch

我的表视图有两个部分,第一部分中有一个开关,另一部分有几个表视图单元。当开关打开时,单元格应该可见并被选中,当开关关闭时,单元格应该被隐藏。

如果我的第一部分的cellForRowAtIndexPath我在用户按以下方式更改开关状态时执行选择器:

- (UITableViewCell *)cellForRowAtIndexPathForFirstSection
{
    [self.tableViewFirstCell.mySwitch addTarget:self action:@selector(changeState:) forControlEvents:UIControlEventValueChanged];
    return self.tableViewFirstCell;
} 

ChangeState方法:

- (void)changeState:(UISwitch *)sender
{
    if ([sender isOn])
    {
        //Show other section and select its cells.
    }

    // Reload the table view.
    [self.tableView reloadData];

    if (![sender isOn])
    {
        // Collect the selected cells data and hide the section.
    }
}

有些用户第一次登陆视图时,系统应该处理更改开关状态的情况。如果开关应该打开,我有:

[self.tableViewFirstCell.mySwitch setOn:YES animated:YES]; or to make it OFF I have:

[self.tableViewFirstCell.mySwitch setOn:NO animated:YES];

问题: 的 因此,无论系统还是用户改变开关,在两种情况下改变开关状态后要执行的逻辑都是相同的。简而言之,当用户更改开关时,调用选择器方法,但是当系统更改状态时,我可以调用选择器来确定交换机切换到的状态,然后适当地执行逻辑。当用户更改开关时?

例如:当用户将开关状态更改为ON时,“if ([sender isOn])”内的逻辑将被执行。我想在系统将开关状态改为ON时执行此逻辑。

1 个答案:

答案 0 :(得分:1)

仅当用户与控件交互时才调用委托方法。如果您希望在通过代码更改状态时处理相同的事件,请自行调用事件处理程序。

[self.tableViewFirstCell.mySwitch setOn:NO animated:YES];
[self changeState:self.tableViewFirstCell.mySwitch];

那就是它。好又简单。