我有一个tableViewController,我可以从中导航到UIViewController。为了保存indexPath.row的值,我使用了一个整数,并基于该整数操作在UIViewController中执行。问题是,当我按下后退按钮并选择另一个表索引时,它会导航到UIViewContoller,但执行的操作是第一个。第二次不调用ViewDidLoad。 这是我的代码。
TableView代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (!self.iaRecipieViewController) {
self.iaRecipieViewController = [[[iRecipieViewController alloc] initWithNibName:@"iRecipieViewController" bundle:nil] autorelease];
}
if (indexPath.row == 0) {
self.iaRecipieViewController.myLableArray =labelSoupArray ;
}
if (indexPath.row == 1) {
self.iaRecipieViewController.myLableArray =labelSoupArray ;
}
if (indexPath.row == 2) {
self.iaRecipieViewController.myLableArray =labelSoupArray ;
}
// custom string is an NSinteger
self.iaRecipieViewController.customString = indexPath.row;
NSLog(@" int %i",self.iaRecipieViewController.customString);
NSLog(@"index path %i ", indexPath.row) ;
[self.navigationController pushViewController:iaRecipieViewController animated:YES];
[detailTable reloadData];
}
UIViewController代码。
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
myLabel.text = [self.myLableArray objectAtIndex:customString];
}
答案 0 :(得分:6)
使用viewWillAppear:(BOOL)animated
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
myLabel.text = [self.myLableArray objectAtIndex:customString];
}
viewDidLoad只会在加载视图时被调用;推送一个新的ViewController然后删除它不会强制重新加载视图。 viewWillAppear在呈现视图之前被调用,因此只要它成为主视图,您就有机会做事。
答案 1 :(得分:2)
ViewDidLoad仅在实例化视图时被调用一次。基于你的代码,你在这个视图上来回走动,因此视图不是每次都被实例化(加载),而是被加载一次,现在它真的是视图消失并且当你回到前进时出现视图。
将您的代码放入ViewWillAppear或ViewDidAppear。
答案 2 :(得分:2)
方法
(void)viewDidLoad
加载视图时运行。 如果您的视图已经加载(意味着它仍然在内存中),也许它已经从屏幕上消失了。但这并不意味着记忆消失了;只需在视图加载到内存时重新运行。