无需按任何按钮即可从视图1切换到视图2

时间:2011-12-28 22:55:12

标签: iphone ios ios4

如何在不按任何按钮的情况下从view1切换到视图2。在我的观点中,我有uiimageview和uitextview

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;

}

但没有发生任何事情。有人可以告诉我我的代码中缺少什么。非常感谢帮助。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您的代码中存在一些值得一提的问题,但我不确定这些是否会为您提供解决方案。

为什么要每2秒重复一次计时器。我想你只想切换到下一个视图一次,如果是这样,那就不要重复计时器了。所以不需要使计时器无效。

SwitchView方法的代码正在泄漏内存。请确保在显示模态视图后释放SecondView(如果您不使用ARC)。

请遵循标准命名惯例。例如:方法和变量应以小写开头。

关于您的问题,请确保nib名称正确,并且您正在获取第二个视图控制器的有效对象。您可以使用NSLog进行检查。还要确保调用方法Switchview。尝试设置一个断点并验证它是否被调用。

另一个选项

如果您只想切换视图一次,您可以选择另一个不使用NSTimer的选项。为此,您可以使用performSelector:withObject:afterDelay:。这只是我上面提到的场景的另一种选择。

答案 1 :(得分: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
  

计时器将自身作为此方法的参数传递。

相关问题