2011-12-28 24 views
0

如何從視圖1切換到視圖2,而無需按任何按鈕。在我的意見,我有是的UIImageView和UITextView的從視圖1切換到視圖2,不用按任何按鈕

隨着IM的NSTimer試圖通過使用下面的代碼中viewDidLoad方法來做到這一點

在firstviewcontroller.h文件

@interface FirstViewController : UIViewController 
{ 
    NSTimer *SwitchingTimer; 
} 

在firstviewcontroller.m文件

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    SwitchingTimer = [NSTimer scheduledTimerWithTimeInterval:2 target:self  selector:@selector(SwitchView) userInfo:nil repeats:YES]; 
} 

-(void)SwitchViews:(id)sender 

在secondviewcontroller.m文件中

-(void) SwitchView 
{ 
SecondViewController *SecondView = [[SecondViewController alloc] 
            initWithNibName:@"SecondViewController" bundle:nil]; 
SecondView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentModalViewController:SecondView animated:YES]; 
[SwitchingTimer invalidate]; 
self.SwitchingTimer = nil; 

} 

但是什麼也沒有發生。有人可以告訴我我的代碼中缺少什麼。將感謝幫助。

在此先感謝。

回答

0

你需要將其添加到運行循環:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    SwitchingTimer = [NSTimer scheduledTimerWithTimeInterval:2 target:self  selector:@selector(SwitchView) userInfo:nil repeats:YES]; 
    [[NSRunLoop currentRunLoop] addTimer: SwitchingTimer forMode:NSDefaultRunLoopMode]; 
} 

此外,您可以重命名-(void)SwitchView-(void)switchViewTimerDidFire:(NSTimer *)timer。從Documentation

[...]選擇器必須具有以下特徵:

- (void)timerFireMethod:(NSTimer*)theTimer 

定時器通過本身作爲參數這種方法。

1

您的代碼中有幾個問題值得一提,但我不確定這些問題是否會爲您提供解決方案。

爲什麼你想每2秒重複計時器。我想你只想切換到下一個視圖一次,如果是的話就不要重複計時器。所以不需要使計時器無效。

您的代碼爲SwitchView方法泄漏內存。請確保SecondView在呈現模態視圖後發佈(如果您不使用ARC)。

請按照標準的命名約定。例如:方法和變量應該以小寫字母開頭。

關於您的問題,請確保筆尖名稱是正確的,並且您正在爲第二個視圖控制器獲取有效的對象。您可以使用NSLog進行檢查。還要確保調用方法Switchview。嘗試放置一個斷點並確認它被調用。

另一個選項

如果你只是想切換隻有一次,你可以去另一個選擇不利用的NSTimer的視圖。爲此,您可以使用performSelector:withObject:afterDelay:。這只是上述場景的另一種選擇。

+1

請注意,使用ARC時,'SwitchView'不再泄漏。 – fabian789 2011-12-29 10:12:32

+0

@ fabian789指出並回答更新。謝謝 :) – visakh7 2011-12-29 10:16:32