UITableView didselectRowAtIndex сомневается - PullRequest
0 голосов
/ 17 января 2012

Ха-а-а, я делаю приложение, которое имеет опцию общего доступа к заметке для evernote, я сделал это успешно, у меня есть табличное представление, которое содержит текст и кнопку для загрузки этого текста в evernote, если пользователь щелкает ячейку, флажок accsocory Приходите, и он может выбрать стих, используя галочку для uploade.но моя проблема в том, что когда пользователь щелкает одну ячейку и нажимает кнопку загрузки, он загружает все значения в строке не только выделенную строку, но и всю строку. Мой код ButtonClick:

-(IBAction)sendNoteEvernote:(id)sender{

 NSMutableString *str = [[NSMutableString alloc] initWithString:@"NOTES:"];
    for (int i = 0; i<[appDelegate.notesArray count]; i++) {
        // UPLOAD STRINGS HERE
        if (selected[i])
        [str appendFormat:@"%@ ,",[appDelegate.notesArray objectAtIndex:i]];

        NSString * ENML= [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE en-note SYSTEM \"http://xml.evernote.com/pub/enml2.dtd\">\n<en-note>%@",str];
}

str - это загружаемое значение код в selectrowatindexpath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

 NSUInteger row = [indexPath row];
    selected[row] = !selected[row];
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = selected[row] ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

in.h я снимаю BOOLEAN selected; в viewdidload

for ( int i=0; i<[appDelegate.notesArray count]; i++) { 
    selected[i] = YES;
}

1 Ответ

0 голосов
/ 17 января 2012

Я бы предложил два отладочных варианта. Сначала выбранными значениями по умолчанию являются YES, поэтому предполагается, что по умолчанию выбраны все строки. Во-вторых, поскольку вы смотрите на событие касания, код переключения:

selected[row] = !selected[row];

недостаточно, вам нужно перебрать массив, установить все в NO, кроме indexPath.row, который вы установили в YES.

for ( int i=0; i<[appDelegate.notesArray count]; i++) {
    if (i == indexPath.row) selected[i] = YES; else selected[i] = NO;
}
...