2013-01-11 24 views
0

我有一个设置屏幕,我在其中设置应用的单位。用户可以从主屏幕进入设置屏幕,并在选择了所需的单位后,设置屏幕被取消。iOS:如何隐藏设置更改上的UITextField?

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

我尝试下面的代码在viewDidLoadviewDidAppear但不工作:

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

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

UPDATE:

我已连接“设置”屏幕使用Suguepush并退出设置屏幕使用[self.navigationController popViewControllerAnimated:YES];这导致用户返回到主屏幕。现在,我需要刷新基础上设置的屏幕控件和它不工作

+1

你有没有在代码或在厦门国际银行或故事板创建它们?如果在厦门国际银行创建或情节提要确保网点设置是否正确。也只是尝试'[textBox1的setHidden:YES];' – RyanG

+0

我创建了故事板的UI,并确保出口连接.. – user1923496

+0

和viewWillAppear中? –

回答

0

感谢您抽出宝贵的时间..我只是意识到我的代码读取值布尔键从NSUserDefaultsviewDidLoad只被调用一次:)

我感动的是代码行viewWillAppear和一切正常!

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秒内,如果一切正确连线,您将看到更改。

+0

嘿,那有效!谢谢。但我真的不想要拖延!有什么可以做的,以避免延误? – user1923496

+0

这是假设他会在15秒内回到前一个视图吗?否则它甚至会崩溃,如果我看到它的权利? – Tom

+0

对于你想要做的事,延迟就在那里,以便你可以看到视图。我想知道为什么需要延迟。它应该是需要的。 – John

0

将以下布尔设置为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]; 

检索第一视图 - 控制:

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; 
} 

这将使更改永久,直到你改回来。猜猜这就是你要找的。

+0

第一部分我的意思是你应该自己给他们一个价值,不管你想要他们是YES还是NO。 – Tom

+0

我在做类似的事情:我设置在我设置一个布尔值,读取该值时,主屏幕再次出现,但是当我阅读和执行代码设置中的布尔'NSUserDefaults'后(写在我的问题),文本框不会隐藏...任何想法可能是错误的或如何做到这一点? – user1923496

+0

啊......你有没有试过viewWillAppear? – Tom

0

由于设置文本不起作用,所以我猜你的IBOutlets可能会搞砸了。重新做他们做到以下几点:

  1. 首先进入你的故事板&放大到你的工作
  2. 控制+单击您的UITextView或的UITextField视图控制器,你会看到一个类似的菜单: enter image description here

你可以看到,我有一个名为txtCaseID一个IBOutlet集

  • 如果你看到一个出口设置像我这样做,请提前次点击X删除
  • 要重新添加该出口,开拓援助编辑器来查看故事板&您的.h
  • 控制+在你的故事板点击您的textBox &拖放到你之前所做的IBOutlet中在您的.h像这样:
  • enter image description here

    确保两个文本框做到这一点。 让我知道如果你需要任何其他帮助 -