【发布时间】:2014-03-07 09:12:25
【问题描述】:
我为单元格创建了一个自定义UITableViewCell 和一个类。然后,我将 viewController 中的这个单元格加载到 tableview 中。自定义单元格有一个标签和一个 UiSwitch。我已经设法让开关按我的意愿工作,并改变需要改变的值。
我现在想要在UITableView 之外有一个单独的 UISwitch - 当它打开时 - UITableView 中的所有开关都打开。
由于某种原因,我无法让它工作。
这是自定义单元格的代码:
- (void)selectAllSwitches:(BOOL)selected
{
if (selected){
[self.selectSwitch setOn:YES animated:YES];
}else{
[self.selectSwitch setOn:NO animated:YES];
}
}
-(void)setMaillist:(BBMailList *)aMaillist
{
maillist = aMaillist;
if (maillist){
self.nameLabel.text = maillist.name;
if (self.maillist.isSubscribed){
self.selectSwitch.on = YES;
}else{
self.selectSwitch.on = NO;
}
}
}
- (IBAction)switchControl:(UISwitch *)sender
{
self.maillist.isSubscribed = !self.maillist.isSubscribed;
NSLog (@"IsSubScribed: %ul", self.maillist.isSubscribed);
if (self.maillist.isSubscribed){
self.selectSwitch.on = YES;
}else{
self.selectSwitch.on = NO;
}
}
然后在 cellForRowAtIndexPath:
static NSString *mailListTableViewCellIdentifier = @"BBMailListTableViewCell";
if (tableView == self.maillistTableview ){
BBMailListTableViewCell * maillistTableviewCell = [self.maillistTableview dequeueReusableCellWithIdentifier:mailListTableViewCellIdentifier];
if (!maillistTableviewCell){
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:mailListTableViewCellIdentifier owner:self options:nil];
maillistTableviewCell = nib[0];
}
if ([self.mailLists count ] > 0){
NSMutableArray *newArray = [NSMutableArray arrayWithArray:self.mailLists];
[newArray removeLastObject];
[newArray removeLastObject];
[self.maillistTableview setContentSize:CGSizeMake(320, 400)];
BBMailList *maillist = newArray[indexPath.row];
maillistTableviewCell.maillist = maillist;
}
return maillistTableviewCell;
}
此代码按我的需要工作。
然后我在 viewController 中为 tableView 之外的 UISwitch 创建了一个 IBAction 方法
- (IBAction)selectAllSwitch:(UISwitch *)sender
{
BBMailListTableViewCell *switchButton = [[BBMailListTableViewCell alloc]init];
[switchButton selectAllSwitches:YES];
}
这在我的 UITableViewCell 类中运行正确的方法 - 但 UITableView 不反映更改。我添加了[self.myTableView reloadData]; - 但这并没有解决问题。谁能为我阐明一些不是他的光?
****更新****
更新了 UITableView 之外的 UISwitch 代码
- (IBAction)selectAllSwitch:(UISwitch *)sender
{
BBMailList *tempMailList = [[BBMailList alloc]init];
tempMailList.isSubscribed = YES;
[self.maillistTableViewCell setMaillist:tempMailList];
[self.maillistTableViewCell selectAllSwitches:YES];
[self.maillistTableview reloadData];
}
每个 mailistItem 都是我用来存储数据的 NSObject。上面的代码运行了正确的方法 - 但似乎我没有保持状态可能和 [self.mayTableView reloadData];运行 - 它将 tableview 数据重置为原始状态?
【问题讨论】:
-
我没有在表格视图的委托 cellForRowAtIndexPath 的任何地方看到对 - (IBAction)selectAllSwitch:(UISwitch *)sender 方法的调用。
-
在操作方法
- (IBAction)selectAllSwitch:(UISwitch *)sender中,您正在创建新单元格,这将与您的表格视图完全无关或连接您认为它将如何更改表格视图中所有单元格的状态 -
@Allamaprabhu - 那是因为我不想在 tableview 中设置所有开关。 selectAll 开关在表格视图之外。 Shan 我已经纠正了使用与 tableview 中加载的 tableviewcell 相同的实例 - 仍然没有区别。
标签: ios iphone objective-c uitableview