如何在不按任何按钮的情况下从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;
}
但没有发生任何事情。有人可以告诉我我的代码中缺少什么。非常感谢帮助。
提前致谢。
答案 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
计时器将自身作为此方法的参数传递。