1

我只是学习如何通过推送和弹出来更改视图之间的切换。现在,在我的第二个视图中,我添加了一个标签,每次我的第二个视图被推送时,我都想改变她的值。我添加标签,将她连接到我的文件所有者,然后使用 viewdidload 更改她的值。当我进入第二个视图时,什么都没有发生。但是当我使用 viewdidapper 时,一切都很完美(但标签值更新需要一秒钟)。

我的代码是:mysecondviewcontroller.h:

@interface SecondViewController : UIViewController
{
     IBOutlet UILabel *textLabel;
     NSString *label;
}

@property (copy) NSString *label;

@end

mysecondviewcontroller.m(当然我合成标签):

-(void)viewDidAppear:(BOOL)animated
 {
   textLabel.text = label;
   NSLog(@"viewdidapper2");
 }

 - (void)viewDidLoad
{
   textLabel.text = label;
   [super viewDidLoad];
    NSLog(@"viewdidload2");

// Do any additional setup after loading the view from its nib.
}

我的 firstviewcontroller.m(IBAction):

- (IBAction)pushViewController:(id)sender
{
    static int count = 1;

    SecondViewController *secondVieController = [[SecondViewController alloc] init];
    [self.navigationController pushViewController:secondVieController animated:YES];   
   secondVieController.title = @"second";
   secondVieController.label = [NSString stringWithFormat:@"number: %d", count];     

   count++;

}

我的 viewdidload 有什么问题?

谢谢!

4

2 回答 2

2

如果您正在使用viewDidLoad,则需要在执行任何其他操作之前调用超级函数。

- (void)viewDidLoad
{
   [super viewDidLoad];
   textLabel.text = label;
    NSLog(@"viewdidload2");

// Do any additional setup after loading the view from its nib.
}

我认为还有另一个问题,您secondVieController.label在推送视图控制器后进行设置,但这意味着在viewDidLoad运行时secondVieController.label仍然是空的。这应该解决它。

- (IBAction)pushViewController:(id)sender
{
    static int count = 1;

    SecondViewController *secondVieController = [[SecondViewController alloc] init];
    secondVieController.title = @"second";
    secondVieController.label = [NSString stringWithFormat:@"number: %d", count];     
    [self.navigationController pushViewController:secondVieController animated:YES];   

    count++;

}
于 2012-05-26T16:25:18.940 回答
0

如果您想在每次加载视图时更新标签,那么您必须将代码写入 Viewwillappear 方法。

于 2012-05-27T05:12:39.000 回答