ios - UISwitch 由系统和用户开启和关闭

标签 ios ios7 uiswitch

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

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

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

changeStateMethod:

- (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.
    }
}

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

[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 时执行此逻辑。

最佳答案

仅当用户与控件交互时才会调用委托(delegate)方法。如果您希望在通过代码更改状态时处理相同的事件,只需自己调用事件处理程序即可。

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

就是这样。漂亮而简单。

关于ios - UISwitch 由系统和用户开启和关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22545042/

相关文章:

ios - 如何在没有按钮的情况下关闭 UIAlertController

ios - UISwitch 不会显示在自定义 UIView 中

ios - 检测应用何时进入后台以供我查看的最佳方法是什么?

android - 查找正在使用的运营商信息,而不是 SIM 卡信息

iOS 7 UIWebView 拦截警报

audio - SKAction playSoundFileNamed 播放白噪声

iOS7 - 搜索结果表格 View 向下推 20 像素

android-layout - 切换与切换

ios - 如何读取自定义 UITableViewCell 中 UISwitch 的变化

ios - - UIView 类别中的 awakeFromNib