2011-12-28 95 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