2013-05-14 89 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

相關問題