iOS:如何在设置更改时隐藏UITextField?

时间:2013-01-11 14:32:39

标签: iphone ios objective-c ipad

我有一个设置屏幕,我在其中设置应用程序的单位。用户可以从主屏幕进入设置屏幕,选择所需的单位后,设置屏幕将被取消。

当用户返回主屏幕时,我想隐藏并显示两个UITextField。

我在viewDidLoadviewDidAppear中尝试了以下代码但不起作用:

textBox1.hidden = YES;
textBox2.hidden = NO;

这可能是微不足道的,但任何帮助都表示赞赏。感谢。

更新

我已使用Sugue将“设置”屏幕与push相关联,并使用[self.navigationController popViewControllerAnimated:YES];关闭设置屏幕,这会将用户带回主屏幕。现在,我需要根据设置刷新屏幕控制,但它无法正常工作

4 个答案:

答案 0 :(得分:1)

第一: 不应该是

self.textBox1 = YES; // or [self.textBox1 setHidden:YES];
self.textBox2 = NO; // or [self.textBox2 setHidden:NO];

第二: 确保出口不为空

NSLog("textBox1 = %@" , self.textBox1);

第三: 试试这样的代码

int64_t delayInSeconds = 15.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
  self.textBox1.hidden = YES;
  self.textBox2.hidden = NO ;
});

在viewWillAppear或DidAppear中执行此操作。然后在15秒内,如果一切正确连接,您将看到更改。

答案 1 :(得分:0)

将以下bool设置为yes或no(在设置屏幕中)。

BOOL hideTextBox1;
BOOL hideTextBox2;

保存变量(在设置屏幕中):

NSString *hideTextBox1String;
NSString *hideTextBox2String;

if(hideTextBox1 == YES){
    hideTextBox1String = @"YES"
}else{
    hideTextBox1String = nil
}

if(hideTextBox2 == YES){
    hideTextBox2String = @"YES"
}else{
    hideTextBox2String = nil
}

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:hideTextBox2String  forKey:@"hideTextBox2"];
[defaults setObject:hideTextBox1String  forKey:@"hideTextBox1"];
[defaults synchronize];

在第一个viewcontroller中检索它:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *hideBox1 = [defaults objectForKey:@"hideTextBox1"];
NSString *hideBox2 = [defaults objectForKey:@"hideTextBox2"];

if(hideBox1 != nil){
    textBox1.hidden = YES;
}else{
    textBox1.hidden = NO;
}

if(hideBox2 != nil){
    textBox2.hidden = YES;
}else{
    textBox2.hidden = NO;
}

这将使更改成为永久更改,直到您更改为止。猜猜那就是你要找的东西。

答案 2 :(得分:0)

由于设置文本不起作用,我猜你的IBOutlets可能搞砸了。要重新执行它们,请执行以下操作:

  1. 首先进入你的故事板&放大您正在处理的视图控制器
  2. 控制+单击您的UITextView或UITextField,您将看到类似的菜单: enter image description here
  3. 您可以看到我有一个名为txtCaseID

    的IBOutlet集
    1. 如果您看到像我这样的插座,请继续并单击X将其删除
    2. 要重新添加此插座,请打开辅助编辑器以查看故事板&你的.h
    3. Control + Click&从故事板中的textBox拖动到之前在.h中创建的IBOutlet,如下所示:
    4. enter image description here

      确保对两个textBox都执行此操作。 如果您需要任何其他帮助,请告诉我 -

答案 3 :(得分:0)

感谢您抽出宝贵的时间..我刚刚意识到我的NSUserDefaults读取布尔值的值的代码是viewDidLoad,只能调用一次:)

我将这行代码移到viewWillAppear,一切都按预期工作!