帮助我获取IndexPath.row值

时间:2011-03-11 04:16:27

标签: iphone uitableview ios4

我使用uiimageview创建了一个复选框,我已将复选框放入uitableview单元格中,如下所示

我想在检查复选框时获得indexpath.row。

所以我在单元格中添加了uiimageviiew。所以调用didSelectRowAtIndexPath并给我indexpath.row。

但是当选择该行时,我想显示详细视图。

现在这让我陷入困境。

所以你们可以建议我如何处理上述问题。

当我选中复选框时,我想获取indexpath.row。

当选择行时,我需要显示详细视图。

感谢您的时间和帮助

更新1:

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

  static NSString *CellIdentifier = @"Cell";

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

  profileName = [appDelegate.archivedItemsList objectAtIndex:indexPath.row];

  if (cell == nil)
  {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:@"xc"] autorelease];

     cb = [[UIButton alloc] initWithFrame:CGRectMake(5,10, unselectedImage.size.width, unselectedImage.size.height)];

     [cb setImage:unselectedImage forState:UIControlStateNormal];
    [cb setImage:selectedImage forState:UIControlStateSelected];
    [cb addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchDown];
    [cell.contentView addSubview:cb];

}

if ( tableView == myTableView )
{
   titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(60, 0, 150, 35)];
   titleLabel.font = [UIFont boldSystemFontOfSize:13];
   titleLabel.textColor = [UIColor blackColor]; 
    [cell.contentView addSubview:titleLabel];
   NSString *subjectData = [profileName.archive_subject stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
        [titleLabel setText:[NSString stringWithFormat: @"%@ ", subjectData]];

        lblDescription = [[UILabel alloc]initWithFrame:CGRectMake(60, 30, 210, 30)];
        lblDescription.numberOfLines = 2;
        lblDescription.lineBreakMode = YES;
        lblDescription.adjustsFontSizeToFitWidth = YES;
        lblDescription.font = [UIFont systemFontOfSize:10];
        lblDescription.textColor = [UIColor grayColor]; 
        [cell.contentView addSubview:lblDescription];
        NSString *CompanyName = [profileName.archive_content stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
        [lblDescription setText:[NSString stringWithFormat: @"%@ ", CompanyName]];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;   
    }


    return cell;
}

2 个答案:

答案 0 :(得分:2)

使用UIButton而不是UIImageView作为您的复选框 - 这样您可以添加一个动作/方法,您可以在其中获取indexPath,此外您可以为选定/未选定状态添加不同的图像,这将消除所有混乱的东西发生在上面的代码中:

所以在你的cellForRowAtIndexPath:方法中:

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...// Your existing code here

    UIImage *unselectedCheckboxImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"unselectedImageName" ofType:@"imageType"]];
    UIImage *selectedCheckboxImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"selectedImageName" ofType:@"imageType"]];

    UIButton *cb = [[UIButton alloc] initWithFrame:CGRectMake(desiredX, desiredY, unselectedCheckboxImage.frame.size.width, unselectedCheckboxImage.frame.size.height)];
    [cb setImage:unselectedCheckboxImage forState:UIControlStateNormal];
    [cb setImage:selectedCheckboxImage forState:UIControlStateSelected];
    [cb addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchDown];
    [cell.contentView addSubview:cb];
    [cb release];
}

然后是按钮操作方法:

- (IBAction)buttonAction:(id)sender
{
    if ([sender isKindOfClass:[UIButton class]])
    {
        UIButton *checkboxButton = (UIButton*)sender;
        checkboxButton.selected = !checkboxButton.selected;
        NSIndexPath *indexPath = [self.myTableView indexPathForCell:(UITableViewCell*)[[checkboxButton superview] superview]];
        // Do whatever you like here 
    }
}

答案 1 :(得分:0)

我认为你的逻辑导致了didSelectRowAtIndexPath:方法中的问题;确保这是正确的。此外,如果您只想对单元格使用复选标记,我认为如果您使用UITableViewCellAccessoryCheckmark则更好。 This可能会给你一个基本想法。