Как добавить строку в tableView с помощью pickerView и листа действий

Любые идеи ? некоторый пример кода или некоторые советы будут приветствоваться... спасибо

// add bank to tableView
-(void)addBankFromList {

    if (notInList == nil) {

        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Could not be added" message:@"Bank already in list" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil, nil];

        [alert show];
        [alert release];

    }

    else {

//       [banksTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:[banks count] inSection:0]] withRowAnimation:UITableViewRowAnimationLeft];
//        [banksTableView reloadData];
    }
}

// call addBankFromList method when button Add to List is touched .
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

    [self addBankFromList];
}

#pragma mark UIPicker Delegate and DataSource methods
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

    for (NSString *temp in banksNotInList) 
        if (temp == [arrayWithBanks objectAtIndex:row]) {

            notInList = [[NSMutableString alloc]initWithString:temp];


            NSLog(@"%@",temp);
        }
        else notInList = nil;
}

РЕШЕНО (прочитайте первый комментарий)

[appDelegate.banks insertObject:notInList atIndex:[appDelegate.banks count]];
        [banksTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:[banks count] inSection:0]] withRowAnimation:UITableViewRowAnimationLeft];

        [banksTableView reloadData];

person Community    schedule 29.06.2011    source источник


Ответы (1)


Похоже, у вас есть правильная идея. Логично, что вам нужно будет проверить, существует ли объект в таблице (что вы уже делаете). Затем, если его нет, вы вставите его. Вот где могут возникнуть проблемы, если вы не слишком хорошо знакомы с обновлением tableView. То, что вы делаете выше, является правильным началом. Вы хотите создать indexPath, куда вы хотите вставить новый объект, но есть несколько шагов, которые вы хотите выполнить, прежде чем фактически вставить новую строку. Ваш numberOfRowsInSection должен совпадать с обновленным числом, поэтому, если вы рисуете этот возврат из массива, вам необходимо обновить массив. Итак, если у вас есть banks в качестве массива, из которого вы отображаете ячейки tableView, вы должны вставить новый объект в массив в его соответствующей позиции, а затем вызвать insertRowsAtIndexPaths:withRowAnimation:. Таким образом, когда tableView вызывает свои dataSource методы, у него не будет противоречивых результатов. Короче говоря, вы обновляете свой массив данных, а затем обновляете tableView. Я надеюсь, что все имеет смысл

person justin    schedule 29.06.2011
comment
stackoverflow.com/questions/6524929/ ? - person Legolas; 29.06.2011
comment
Не за что. Я рад помочь, и это помогло вам - person justin; 29.06.2011