我的 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/