在行动时向UITableViewCell添加详细信息?

时间:2014-05-05 19:55:55

标签: ios objective-c uitableview

我有一个UITableView,其中包含包含集合视图的单元格。我需要在导航栏中按一个按钮,然后向我的所有单元格添加一个详细信息披露按钮。这应该使我能够点击它并将我推送到新的视图控制器。

有没有办法将此动作设置到我的所有表格视图单元格上,以便用户可以通过点击按钮来显示或隐藏该功能?

2 个答案:

答案 0 :(得分:1)

不完全是你想要的,但逻辑将是这样的:

@interface YourViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

@property (strong, nonatomic) IBOutlet UITableView *tableView;
@property (nonatomic, strong) NSArray *dataArr;
@property (strong, nonatomic) NSMutableArray *checksArr;

@end

并在 YourViewController.m 文件中

@implementation YourViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.checksArr = [[NSMutableArray alloc] init];

    for (int i=0; i<self.dataArr.count; i++) {
        [self.checksArr addObject:[NSNumber numberWithBool:NO]];
    }
}


#pragma mark - TableView Datasource
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
        if([[self.checksArr objectAtIndex:indexPath.row] boolValue]) {
           [cell setAccessoryType:UITableViewCellAccessoryDetailDisclosureButton];
        }

    return cell;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [self.dataArr count];
}


-(void) btnNavigationBarTapped:(id)sender {
    for (int i=0; i<self.dataArr.count; i++) {
            [self.checksArr replaceObjectAtIndex:i withObject:[NSNumber numberWithBool:YES]];
        }
    [self.tableview reloadData];
}

答案 1 :(得分:0)

假设您要在每个UICollectionViewCell个实例上显示/隐藏自定义披露指标:

在您的collectionView:cellForItemAtIndexPath:方法中,将单元格配置为根据某个状态变量显示或隐藏公开指示符,以便因滚动而配置的新单元格将具有正确的状态:

MyCollectionViewCell *cell = [self.collectionView dequeueReusableCellWithIdentifier:@"MyCellIdentifier"];

// some variable that stores whether to show the indicators
cell.disclosureVisible = self.disclosureIndicatorsVisible;

// Any more setup you need to do with your cell

然后,当您点击按钮更改指标的可见性时,您有几个选项,具体取决于您要执行的操作:

  1. 在表格视图上调用reloadData,这将导致所有集合视图刷新。
  2. 对于您可以通过调用[self.tableView indexPathsForVisibleRows]获取的每个可见表格视图单元格,获取带有[cell.collectionView indexPathsForVisibleItems]的每个集合视图单元格。然后在执行动画的每个单元格上调用自定义方法以显示或隐藏指示符。
  3. 编辑:您在评论中说您希望表格视图单元格显示详细信息披露指标。在这种情况下,您可能希望如上所述获取表视图的所有可见单元格,并将accessoryType设置为UITableViewCellAccessoryDetailDisclosureButton。但是,accessoryType不是可动画的属性,因此您可能需要向UITableViewCell子类添加自定义属性,该子类动画显示和隐藏自定义附件视图,然后响应点击。