如何在解除UIViewController后重新加载tableView

时间:2012-04-07 16:10:47

标签: ios tableview reloaddata

我使用以下方法来呈现名为DictAddSubSecondCell的UIViewController:

// UIViewControler 1
- (IBAction)addWord:(id)sender{
dictAddSubSecondCellController = [[DictAddSubSecondCell alloc] initWithNibName:@"DictAddSubSecondCell" bundle:nil];
[self presentModalViewController:dictAddSubSecondCellController animated:YES];
[dictAddSubSecondCellController release];
}

当我点击DictAddSubSecondCell中的按钮时:

- (IBAction)dismissAction:(id)sender{ 
[self dismissModalViewControllerAnimated:YES];
}

UIViewControler 1上的tableView没有重新加载它的数据,但我在viewWillApear方法中添加了一个方法:

[self.table reloadData];

但它仍然不起作用。我不知道这个。对我有什么建议吗?感谢。

以下是UIViewcontroller 1的完整源代码:

//
//  DictAddSubSecond.m
//
//  Created by Samuel Armstrong on 4/8/12.
//  Copyright 2012 __MyCompanyName__. All rights reserved.
//

#import "DictAddSubSecond.h"
#import "DictionaryList.h"

@implementation DictAddSubSecond
@synthesize dictList, table, editButton;
@synthesize dictAddSubSecondCellController;

- (IBAction)addWord:(id)sender
{
    dictAddSubSecondCellController = [[DictAddSubSecondCell alloc] initWithNibName:@"DictAddSubSecondCell" bundle:nil];
    [self presentModalViewController:dictAddSubSecondCellController animated:YES];
    [dictAddSubSecondCellController release];
}

- (IBAction)toggleEdit {
    [self.table setEditing:!self.table.editing animated:YES];

    if (self.table.editing) {
        [editButton setTitle:@"Done"];
        [editButton setStyle:UIBarButtonItemStyleDone];
    }
    else {
        [editButton setTitle:@"Edit"];
        [editButton setStyle:UIBarButtonItemStyleBordered];

    }
}

- (IBAction)dismissAction:(id)sender
{
    [self dismissModalViewControllerAnimated:NO];
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)refreshTableData
{
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *file = [path stringByAppendingPathComponent:@"dictWithWords.tmp"];
    if (dictList == nil) {
        NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:file];
        if ([array objectAtIndex:0] != nil) {
            dictList = [[NSMutableArray alloc] initWithCapacity:1];
            self.dictList = array;
            [array release];
        }
        else
        {
            dictList = [[NSMutableArray alloc] initWithCapacity:1];
        }
    }
    [self.table reloadData];

}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [self refreshTableData];
}

- (void)someMethodToReloadTable:(NSNotification *)notification 
{
    [table reloadData];  
}


- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(someMethodToReloadTable) name:@"reloadTable" object:nil];


}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"reloadTable" object:nil];


}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}




#pragma mark -
#pragma mark Table View Data Source Methods

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [dictList count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *MoveMeCellIdentifier = @"MoveMeCellIdentifier";
    UITableViewCell *cell = [self.table dequeueReusableCellWithIdentifier:MoveMeCellIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:MoveMeCellIdentifier] autorelease];

        //A Boolean value that determines whether the cell shows the reordering control.
        cell.showsReorderControl = YES;

    }
    NSUInteger row = [indexPath row];

    cell.textLabel.text = [dictList objectAtIndex:row];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    return cell;
}

#pragma mark -
#pragma mark Table View Delegate Methods
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSUInteger row = [indexPath row];
    [self.dictList removeObjectAtIndex:row];
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
                     withRowAnimation:UITableViewRowAnimationMiddle];
}


- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleDelete;
}




// Asks the data source whether a given row can be moved to another location in the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}


//Tells the data source to move a row at a specific location in the table view to another location.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
    NSUInteger fromRow = [fromIndexPath row];
    NSUInteger toRow = [toIndexPath row];

    id object = [[dictList objectAtIndex:fromRow] retain];
    [dictList removeObjectAtIndex:fromRow];
    [dictList insertObject:object atIndex:toRow];
    [object release];
}


@end

1 个答案:

答案 0 :(得分:1)

尝试在viewDidAppear:而不是viewWillAppear:中调用它。