0

我有一个 tableViewController 从中导航到 UIViewController。为了保存 indexPath.row 的值,我使用了一个整数,并基于该整数在 UIViewController 中执行操作。问题是当我按下后退按钮并选择另一个表索引时,它导航到 UIViewContoller 但执行的操作是第一个。第二次没有调用 ViewDidLoad。这是我的代码。

表视图代码:

- (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];
}
4

3 回答 3

6

采用viewWillAppear:(BOOL)animated

-(void)viewWillAppear:(BOOL)animated {

  [super viewWillAppear:animated];
  myLabel.text = [self.myLableArray objectAtIndex:customString];

}

viewDidLoad 只会在视图加载时被调用;推送一个新的 ViewController 然后删除它不会强制重新加载视图。viewWillAppear 在视图被渲染之前被调用,所以只要它成为主视图,你就有机会做一些事情。

于 2013-03-04T21:11:12.717 回答
2

ViewDidLoad 仅在实例化视图时被调用一次。根据您的代码,您将在此视图上来回移动,因此该视图不是每次都实例化(加载),而是加载一次,现在它实际上是视图在您来回移动时消失和出现看法。

将您的代码放入 ViewWillAppear 或 ViewDidAppear。

于 2013-03-04T21:10:50.860 回答
2

方法

(void)viewDidLoad

在加载视图时运行。如果您的视图已经加载(意味着它仍在内存中),可能它已经从屏幕上消失了。但这并不意味着记忆消失了;当视图应该加载到内存时重新运行。

于 2013-03-05T03:25:09.917 回答