Помогите мне получить значение IndexPath.row - PullRequest
1 голос
/ 11 марта 2011

Я создал флажок, используя 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 ]

2 голосов
/ 11 марта 2011

Используйте 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 
    }
}
0 голосов
/ 11 марта 2011

Я думаю, что ваша логика вызывает проблему в методе didSelectRowAtIndexPath:; убедитесь, что это правильно. Кроме того, если вы просто хотите использовать галочку для ячейки, я думаю, что лучше использовать UITableViewCellAccessoryCheckmark. Это может дать вам основную идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...