UIButton单击发件人始终转到所选选项



我有一个UIButton点击发送器,如下所示:-

-(IBAction)clipButtonClick:(UIButton *)sender
{
sender.selected  = ! sender.selected;
if (sender.selected)
{
[btnClipCategory setImage:[UIImage imageNamed:@"imgClip_HL"] forState:UIControlStateSelected];
NSMutableArray* indexArray = [NSMutableArray array];
for (NSInteger i = 0; i < self.arySubCategory.count; i++)
{
[aryCheckCategoryList replaceObjectAtIndex:i withObject:@"YES"];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
[indexArray addObject:indexPath];
dispatch_async(dispatch_get_main_queue(), ^{
[self.rightTableView reloadData];
});
}
}
else
{
[btnClipCategory setImage:[UIImage imageNamed:@"imgClip"] forState:UIControlStateNormal];
NSMutableArray* indexArray = [NSMutableArray array];
for (NSInteger i = 0; i < self.arySubCategory.count; i++)
{
[aryCheckCategoryList replaceObjectAtIndex:i withObject:@"NO"];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
[indexArray addObject:indexPath];

dispatch_async(dispatch_get_main_queue(), ^{
[self.rightTableView reloadData];
});
}
}
}

当我点击按钮时,发件人将始终点击所选选项。

如果我将发件人的代码更改为下面的示例代码,我的应用程序将按预期正常工作。知道吗?请帮忙。非常感谢。

-(IBAction)clipButtonClick:(UIButton *)sender
{
sender.selected  = ! sender.selected;
if (sender.selected)
{
[btnClipCategory setImage:[UIImage imageNamed:@"imgClip_HL"] forState:UIControlStateSelected];
NSLog(@"Selected. Will Hit here");
}
else
{
[btnClipCategory setImage:[UIImage imageNamed:@"imgClip"] forState:UIControlStateNormal];
NSLog(@"Non Selected. Will Hit here");
}
}

已编辑我将按钮放在willDisplayHeaderView下。

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section{
UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
btnClipCategory = [UIButton buttonWithType:UIButtonTypeCustom];
[btnClipCategory setFrame:CGRectMake(header.frame.size.width - 45, header.frame.size.height * 0.2, ScreenW * 0.1, ScreenW * 0.1)];
[btnClipCategory addTarget:self action:@selector(clipButtonClick:) forControlEvents:UIControlEventTouchUpInside];
[header addSubview:btnClipCategory];
}

调用[self.rightTableView reloadData]时,会重新加载表视图的所有内容(包括节头(,并为每个可见的节头调用tableView:willDisplayHeaderView:forSection:。因此,每次触发单击操作时,都会使用默认值isSelected重新创建bntClipCategory。您没有在工作代码示例中重新加载rightTableView,这就是它工作的原因。

你应该重新考虑你的做法。其中一个选项是为数组中的每个部分保存按钮的isSelected状态,并在将其添加到标题视图之前相应地更新btnClipCategory.isSelected

最新更新