Как добавить строку в tableView, используя pickerView и Actionsheet - PullRequest
1 голос
/ 29 июня 2011

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

// 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];

1 Ответ

0 голосов
/ 29 июня 2011

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

...