当弹出回View Controller时,UIButton文本不会更新

时间:2013-04-16 23:12:11

标签: ios objective-c uibutton

第一个VC - >第二个VC - >第三个VC 然后,弹出来 第一VC< - 3rd VC。

在第三个VC上选择的单元格文本存储在NSUserDefaults中,我使用该文本填充第一个VC上的UIButton文本。

问题是UIButton中的文本没有刷新/更改它会从第3个VC弹回第1个VC。只有在我停止应用程序然后重新运行(在XCode Simulator中)时才会刷新文本。

因此它正确地保存了NSUserDefaults中的文本,但当它弹回第一个VC时,不知何故UIButton不会刷新。

当我回到第一个VC时,如何帮助刷新UIButton?

CNC中 第一个VC的代码片段:

// Grab text from defaults
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *teamNameOne = [defaults objectForKey:@"teamName1"];
// Set button Title
[buttonOne setTitle:teamNameOne forState:UIControlStateNormal]; 

2 个答案:

答案 0 :(得分:1)

确保在第3个VC中将值保存到NSUserDefaults后,同步:

[defaults synchronize];

使用最近设置的值更新商店。

要检查的其他三件事:

  1. 确保在第一个VC加载后,您设置标题的按钮实际上处于正常控制状态。

  2. 确保在第一个VC中填充该按钮标题的调用是在viewWillAppear中完成而不是在viewDidLoad中完成的。使用导航控制器时,弹出回已加载的视图时不会调用viewDidLoad。还要确保打电话给超级:

    -(void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
    
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSString *buttonTitle = [defaults valueForKey:@"ButtonTitle"];
    
        [self.myButton setTitle:buttonTitle forState:UIControlStateNormal];
    }
    
  3. 确保在弹出第一个VC之前填充NSUserDefaults商店。

  4. 这是我刚刚构建的项目,可以满足您的需求(非常简单的项目): https://dl.dropboxusercontent.com/u/3660978/SO_ViewControllerTransition.zip

答案 1 :(得分:1)

对于NSUserDefaults来说,这不是一个好用途 - 它并不意味着你在应用程序中传递的值的临时存放位置。

你应该通过展开segue来做到这一点。您可以在prepareForSegue方法中将数据传递回VC1,就像您正常的前向segue一样。你也可以在VC1中找到一个方法(你将unwind segue连接起来的方法),可用于更新该控制器中的UI。