【问题标题】:UISwitch on and off by system and by userUISwitch on and off by system and by user
【发布时间】:2014-03-20 21:03:38
【问题描述】:

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

如果我的第一部分的 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.
    }
}

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

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

【问题讨论】:

  • “系统改变开关状态”是什么意思?您的意思是当您的代码显式更改状态时?
  • 是的系统我的意思是代码改变了状态。

标签: ios ios7 uiswitch


【解决方案1】:

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

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

就是这样。漂亮又简单。

【讨论】:

  • 是的,我刚刚意识到我应该显式调用“changeState”方法,但是有没有办法可以在“[self.tableViewFirstCell.mySwitch setOn:NO animated:YES]”中添加选择器调用?如果没有,那么我将使用对“changeState”方法的显式调用。
  • 不,你需要打两个电话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 2021-08-04
相关资源
最近更新 更多