我的表视图有两个部分,第一部分中有一个开关,另一部分有几个表视图单元。当开关打开时,单元格应该可见并被选中,当开关关闭时,单元格应该被隐藏。
如果我的第一部分的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时执行此逻辑。
答案 0 :(得分:1)
仅当用户与控件交互时才调用委托方法。如果您希望在通过代码更改状态时处理相同的事件,请自行调用事件处理程序。
[self.tableViewFirstCell.mySwitch setOn:NO animated:YES];
[self changeState:self.tableViewFirstCell.mySwitch];
那就是它。好又简单。