2013-05-14 61 views
0

我有一个具有两个屏幕的应用程序。在第一个屏幕中,有一个按钮通过模态轮廓打开第二个屏幕作为模态视图,并且它有一个UILabel。iOS:以编程方式更改模态视图的UILabel文本

我想这个UILabel有一个特定的文本,取决于用户点击按钮的次数(他们提示:用户只能点击按钮,看到提示三次)。 我在做什么是以下方法的每一次点击该按钮:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"TipModal"]) { 
     QuizTipViewController * detailViewController = (QuizTipViewController *) segue.destinationViewController; 
     detailViewController.delegate = self; 
     detailViewController.tipText = self.quiz.currentTip; 
     [detailViewController.numberTipsText setText:[NSString stringWithFormat:@"Pistas para la respuesta (usadas %ld de 3)", (long)self.quiz.tipCount]] ; 
     NSLog(@"%d", self.quiz.tipCount); 
     NSLog(@"%@", detailViewController.numberTipsText.text); 
    } 
} 

最后两个日志有以下的输出:

2013-05-14 19:10:47.987 QuoteQuiz[1241:c07] 0 
2013-05-14 19:10:47.989 QuoteQuiz[1241:c07] Hints (0 out of 3 used) 

然而,在的UILabel的文本始终是空的。

在模态窗口的视图控制器的.h文件中,我定义的UILabel为:

@property (strong, nonatomic) IBOutlet UILabel* numberTipsText; 

,我甚至在实现文件中创建:

-(UILabel *)numberTipsText { 
    if (!_numberTipsText) { 
     _numberTipsText = [[UILabel alloc] init]; 
    } 
    return _numberTipsText; 
} 

知道为什么这可能会发生,请吗?

非常感谢!

+0

你确定当你将文本视图控制器的观点是加载到标签?如果不是,则将文本分配给在getter中创建的UILabel,但是当视图加载时,该属性被覆盖。 – 2013-05-14 17:23:09

+0

@MarcinKuptel是不是应该加载如果NSLog(@“%@”,detailViewController.numberTipsText.text);'显示输出? – noloman 2013-05-14 17:25:58

+0

好吧,您的标签已创建,但控制器视图可能未加载。然后你必须将你的标签添加到控制器的视图。如果您为_numberTipsText指定一个值,然后控制器的视图从nib加载,则您的指定值将被销毁。 – 2013-05-14 17:26:50

回答

0

原因标签上有没有文字,是因为你指定你的文字在你的

-(UILabel *)numberTipsText 

吸气创建的标签。然后,当控制器的视图从笔尖加载时,将使用从笔尖加载的标签覆盖numberTipsText属性,该标签不包含任何文本。解决办法是删除,创建一个新的UILabel,然后,吸气:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"TipModal"]) { 
     QuizTipViewController * detailViewController = (QuizTipViewController *) segue.destinationViewController; 
     detailViewController.delegate = self; 
     detailViewController.tipText = self.quiz.currentTip; 
     //numberOfTipsText is a NSString property 
     detailViewController.numberOfTipsText = [NSString stringWithFormat:@"Pistas para la respuesta (usadas %ld de 3)", (long)self.quiz.tipCount]; 
    } 
} 

在QuizTipViewController的viewDidLoad方法:

- (void) viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.numberOfTipsLabel.text = self.numberOfTipsText; 
} 
+0

理解,谢谢!这是做这件事的标准方法吗?对于每个标签,我需要标签和IBOutlet以及一个NSString属性,以便包含它传递的文本。 – noloman 2013-05-15 18:50:22

+0

如果你有很多NSString对象你想传递给另一个控制器,那么你可以把它们全部放在字典中。 – 2013-05-15 18:52:49

相关问题