【问题标题】:How to grayout all tableview cells except selected one如何使除选定一个以外的所有表格视图单元格变灰
【发布时间】:2013-05-09 13:24:59
【问题描述】:

我有一个带有自定义单元格的表格视图,自定义单元格上有 uibuttons,如果我选择按钮,除了单元格剩余的所有单元格都应该变灰或禁用是否可能。

//tableview类中的代码

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
{
NSLog(@"No OF rows:%d",[contents count]);
return [contents count];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{

static NSString *cellIdentifier = @"cell";

// Try to retrieve from the table view a now-unused cell with the given identifier.
cell = (uploadCustomCell *)[tableView    dequeueReusableCellWithIdentifier:@"uploadCustomCell"];
if (cell == nil) {
    NSLog(@"cell allocated");
    // Use the default cell style.

    cell = [[uploadCustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"uploadCustomCell"];
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"uploadCustomCell"
                                                        owner:self options:nil];


  cell = [nib objectAtIndex:0];
}
   saveBtnCcell.hidden = YES;
   cell.textNamefield.hidden = YES;
 [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
[cell.defaultSwitch setEnabled:NO];
   dictionaryContents = [contents objectAtIndex:indexPath.row];
   NSLog(@"dict dict :%@",dictionaryContents);
  //

   cell
.nameLabelCell.text   = [dictionaryContents valueForKey:@"VideoName"];
    cell.userName.text = [dictionaryContents valueForKey:@"User"];
  NSLog(@"Array Image:%@",arrayimage);
  cell.thumbImg.image = [arrayimage objectAtIndex:indexPath.row];
   NSLog(@"ARimage:%@,index%d",[arrayimage objectAtIndex:indexPath.row],indexPath.row);
   NSString *defaultVideo = [dictionaryContents valueForKey:@"DefaultVideo"];
NSLog(@"Default Video:%@",defaultVideo);
if ([defaultVideo isEqual: @"1"]) {
    //        [cell.defaultSwitch setOn:YES animated:YES];
    [defaultSwitche setOn:YES animated:YES];

}
else{
      //        [cell.defaultSwitch setOn:NO animated:YES];
    [defaultSwitche setOn:NO animated:YES];
}

   [cell.defaultSwitch addTarget:self action:@selector(setState:) forControlEvents:UIControlEventValueChanged];



VideoNameTextField.hidden = YES;

   return cell;


}

// 自定义单元格中的代码

  @interface uploadCustomCell (){
UploadAllViewController *uploadAll;
}

@end
@implementation uploadCustomCell
@synthesize textNamefield;
@synthesize savebtn,edit,nameLabelCell,textLabel,uploadBTN;
@synthesize defaultSwitch;
//@synthesize uploadAll;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    // Initialization code
}
return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];

// Configure the view for the selected state
}


- (void)dealloc {
[_userName release];

[_thumbImg release];

  //[savebtn release];
[textNamefield release];
[nameLabelCell release];
[_test release];

[savebtn release];
[defaultSwitch release];
[uploadBTN release];
[super dealloc];
}


- (IBAction)editAction:(id)sender {
[uploadBTN setEnabled:NO];
uploadAll = [[UploadAllViewController alloc]init];
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:uploadAll.tabelView1];
NSIndexPath *indexPath = [uploadAll.tabelView1 indexPathForRowAtPoint:buttonPosition];
int no = indexPath.row;
NSLog(@"index path :%d",no);
[uploadAll didEditButtonPressed:self];

}
- (IBAction)saveBtnAction:(id)sender {
 [uploadBTN setEnabled:YES];
[uploadAll didSaveButtonPressed:self];
}

当我选择这个editAction时:除了单元格剩余的单元格应该是灰色的。

【问题讨论】:

  • 您好,欢迎来到 SO。为了能够帮助您,您需要提供更多信息和代码。阅读stackoverflow.com/faq#questions,了解您可以在这里提出什么样的问题。

标签: iphone ios uitableview custom-cell


【解决方案1】:

在您的cellForRowAtIndexPath 中,您必须考虑表格视图的状态,即是否选择了一个或零个单元格。使用它来根据需要更改单元格的外观。在下面的示例中,我假设您有一个没有任何部分的直数组,但同样的原理也适用于 indexPaths。如果没有选择单元格,我使用 int selectedRow 设置为 -1

#define kNoCellSelected -1

// in cellForRowAtIndexPath:

if (self.selectedRow == kNoCellSelected) {
    cell.backgroundView.backgroundColor = normalColor;
    cell.userInteractionEnabled = YES;
}
else if (self.selectedRow != indexPath.row) {
    cell.backgroundView.backgroundColor = disabledColor;
    cell.userInteractionEnabled = NO;
}

不要忘记在didSelectRowAtIndexPath:viewDidLoad 中设置selectedRow

【讨论】:

  • 如果我们在单元格中使用此代码作为 indexpath 的行,我们不会在每次按下按钮时重新加载表格。
  • 这不是这段代码的作用。您必须在按钮方法中使用reloadRowsAtIndexPaths。但是,只有当您像上面那样动态配置每个单元格时,它才会起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
相关资源
最近更新 更多