如何在模态视图控制器编辑数据源(数组)后重新加载表视图

时间:2010-01-20 05:11:18

标签: iphone

嘿,我有这个问题,UITableView Not refreshing after Modal View Controller dismisses

但是,我似乎没有得到一个直接的答案,

其他人可以解释一下吗?

继承代码。

FirstViewController.h

@interface FirstViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {

NSMutableArray *routines;
IBOutlet UITableView *myTableView;

}

 @property (nonatomic, retain) NSMutableArray *routines;
 @property (nonatomic, retain) UITableView *myTableView;

- (IBAction)showNewEventViewController;   

@end

及其.m

#import "FirstViewController.h"
#import "NewEventViewController.h"

@implementation FirstViewController

@synthesize routines, myTableView;


- (void)viewWillAppear:(BOOL)animated{
[myTableView reloadData];
NSLog(@"Routines: %@", routines);
NSLog(@"refreshed!");

for(int i = 0; i < [routines count]; i++){

    NSLog(@"%@", [routines objectAtIndex:i]);

          }

 }  




- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

return [routines count];

}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}

// Set up the cell...
NSString *cellValue = [routines objectAtIndex:indexPath.row];
[cell.textLabel setText:cellValue];

return cell;
}



- (IBAction)showNewEventViewController {    

NewEventViewController *controller = [[NewEventViewController alloc] initWithNibName:@"NewEventView" bundle:nil];
controller.routines = routines;
controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:controller animated:YES];

[controller release];
}




- (void)viewDidLoad {

routines = [[NSMutableArray alloc] init];

[routines addObject:@"Hello"];
[routines addObject:@"Temp"];
[routines addObject:@"Temp2"];
[routines addObject:@"Temp3"];
[routines addObject:@"Temp4"];


}

和模态视图控制器.h(NewEventViewController.h)

#import <UIKit/UIKit.h>


 @interface NewEventViewController : UIViewController {

IBOutlet UITextField *RoutineTitle;

IBOutlet UITextField *RoutineInvolvment;


NSMutableArray *routines;


}


@property(nonatomic, retain)  NSMutableArray *routines;


-(IBAction)done;


@end

及其.h

#import "NewEventViewController.h"
#import "FirstViewController.h"




@implementation NewEventViewController
@synthesize routines;


-(IBAction)done{



 [routines addObject:RoutineTitle.text]; 
[self dismissModalViewControllerAnimated:YES];
NSLog(@"Routines: %@", routines);

}

2 个答案:

答案 0 :(得分:0)

你一直在问同样的问题,所以显然某处存在脱节。发布用于呈现模态视图控制器的代码。工作流程应该是这样的:

  • 创建视图控制器,您将按模式推送。确保它有一个用于设置表视图数据容器的ivar和访问器(例如setDataContainer:(NSMutableArray *)dataContainer)

  • 调用setDataContainer:视图控制器上的例程。

  • 介绍模态视图控制器

  • 在完成按钮中,将记录添加到您设置的数据容器中([dataContainer addObject:newObject],并关闭模态视图控制器

  • 在上面链接的代码中调用viewWillAppear中的reloadData。

如果您不发布一些显示您正在做的事情的代码,我们无法帮助您。

最诚挚的问候,

答案 1 :(得分:0)

您的done选择器需要调用reloadData。如果一切都正确连接(表视图委托,dataSource)它应该正常工作。但是,您可以将视图设置为隐藏并重新显示,直到它工作,但它过于hackish(而不是正确的方法)。

您的已完成是NewEventViewController的一部分,因此您可以:

1使用NSNotificationCenter defaultCenter

传递数据

2.使FirstViewController实例成为可从done选择器访问的全局。