2012-12-21 23 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的所有言论都非常有效和相当重要。