UITableview не перезагружается после UIAlertview - PullRequest
0 голосов
/ 25 сентября 2010

После ввода с новым элементом в методе делегата от UIAlertView я вызываю reloadData из UITableview, и он не обновляется:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
                                           forRowAtIndexPath:(NSIndexPath *)indexPath 
{
    // If row is deleted, remove it from the list.
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    {
        if (indexPath.row > 0) 
        {
            [datController RemoveData:indexPath.row-1];
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
                         withRowAnimation:UITableViewRowAnimationFade];
        }

    } 
    else if(editingStyle == UITableViewCellEditingStyleInsert)
    {
        UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Enter the item." message:@"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok",nil];    

        fldItem = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)];
        [fldItem setBackgroundColor:[UIColor whiteColor]];

        [myAlertView addSubview:fldItem];

        [tableView reloadData]; 
        [myAlertView show];
        [myAlertView release];          
    }       

}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{
    if(buttonIndex == 0){}          
    else 
    {   
        [datController AddData:fldItem.text];
        [self.tableView reloadData];        
    }
}

Обратите внимание, что reloadData в методе commitEditingStyle я вставил только для целей отладки, и в этом месте он работает.

Метод cellForRowAtIndexPath, который перерисовывает представление таблицы, не запускается после выполнения reloadData:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    //Try to get rusable (rusable) cell
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
    if (cell == nil) 
    {
        //If not possible create a new cell
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectMake(0,0,0,0) reuseIdentifier:@"CellIdentifier"] autorelease];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }

    // Get the string to display and set the value in the cell
    if(indexPath.row == 0)
    {
        cell.textLabel.text  = @"Add items...";
    }
    else
    {
        cell.textLabel.text = [datController ListData:indexPath.row-1];
    }
    return cell;
}   

1 Ответ

0 голосов
/ 25 сентября 2010

Не уверен, что пошло бы не так, чтобы оказаться в данной ситуации, но вы уверены, что self.view не ноль?

В месте, где работает вызов reloadData, вы используетеСсылка tableView передана вам, а не self.view, но вызов, который не работает, использует self.view.С помощью приведенного выше кода это единственное очевидное, что я заметил до сих пор.

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