2012-12-21 60 views
1

我做了一個叫做view2的類,它是一個UIView控制器的子類,當我運行該程序時,定時器工作正常,但是當它改變屏幕時,它只是變黑而不是圖片I有view2。這是我對開放視圖的.m代碼,任何人都可以看到這裏出錯了嗎?無法弄清楚如何使用NSTimer更改視圖

- (void)viewDidLoad 
{ 
    randomMain = [NSTimer scheduledTimerWithTimeInterval:(2) target:self selector:@selector(onTimer) userInfo:nil repeats:NO]; 

    [super viewDidLoad]; 
} 


-(void)onTimer{ 

    view2 *second= [[view2 alloc] initWithNibName:nil bundle:nil]; 
    [self presentViewController:second animated:YES completion:nil]; 

} 

回答

0

您必須指定要加載(不含擴展名)在廈門國際銀行文件的名稱:

view2 *second = [[view2 alloc] initWithNibName:@"MyView2Xib" bundle:nil]; 

或者,如果您以編程方式創建GUI,只使用一個簡單init

view2 *second = [[view2 alloc] init]; 

一些補充說明:

  • 類名應始終以大寫字母開頭,以將它們與變量區分開來。
  • 這是一個好主意,在你的子類名稱中包含超類'名稱的一部分。如果我看到一個名爲View2的課程,我會認爲它是一個UIView子類。我寧願叫它ViewController2
  • 沒有必要把括號中的間隔。
  • NSTimer的動作應該有一個參數(本身)。

編輯:

隨着你必須手動進行設置了2次之間的塞克故事板:

- (void)onTimer { 
    [self performSegueWithIdentifier:@"YourSegueIdentifier" sender:self]; 
} 
+0

感謝您的快速響應,我在故事板中創建了視圖,並將view2類附加到了它上面嗎?是否需要爲它創建一個xib才能使其運行? view2 * second = [[view2 alloc] initWithNibName:@「view2」bundle:nil]; [self presentViewController:second animated:YES completion:nil];這是我剛剛嘗試過的並且沒有成功。 – kyle

+0

你應該提到,你正在使用故事板。看到我更新的答案。 – DrummerB

+0

如果你有一個名字是類名的nib(所以使用問題view2.xib中的名字),你可以傳遞'nil'作爲nib名字。 UIViewController將把兩個和兩個放在一起並加載正確的筆尖。如果你將其他的名字命名,那麼你必須告訴它那個名字;如果你不爲這個VC創建一個筆尖,那麼你將不得不自己提供它的視圖。 –

0

我想viewDidLoad中是不是適當的地方你目的。你應該改用viewDidAppear。

DrummerB的所有言論都非常有效和相當重要。