无法弄清楚如何使用 NSTimer 更改视图

Posted

技术标签:

【中文标题】无法弄清楚如何使用 NSTimer 更改视图【英文标题】:cant figure out how to change views using an NSTimer 【发布时间】:2012-12-21 19:36:37 【问题描述】:

我创建了一个名为 view2 的类,它是 UIView Controller 的子类,当我运行程序时,计时器工作正常,但是当它改变屏幕时,它只是变黑,而不是我在 view2 上的图片。这是我在打开视图的 .m 上的代码,任何人都可以看到哪里出错了吗?

- (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];


【问题讨论】:

【参考方案1】:

您必须指定要加载的 xib 文件的名称(不带扩展名):

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];

【讨论】:

感谢您的快速响应我在情节提要中制作了视图并将 view2 类附加到它我需要制作一个 xib 才能让它工作吗? view2 *second= [[view2 alloc] initWithNibName:@"view2" bundle:nil]; [self presentViewController:第二个动画:YES 完成:nil];这是我刚刚尝试过的,没有成功。 您应该提到,您正在使用情节提要。请参阅我的更新答案。 如果您有一个名称是类名称的 nib(因此,使用问题中的名称 view2.xib),您可以传递 nil 作为 nib 名称。 UIViewController 会将两个和两个放在一起并加载正确的笔尖。如果您将笔尖命名为其他名称,则必须告诉它该名称;如果你根本不为这个 VC 创建一个 nib,那么你必须自己提供它的视图。 谢谢你们 我终于让它工作了 我无法为笔尖选择一个类,最后意识到它已经在一个类中制作并且不需要分配它。我觉得自己真的很笨,但是很好。我暂时不会弄乱故事板。【参考方案2】:

我认为 viewDidLoad 不适合您的目的。您应该改用 viewDidAppear。

DrummerB 的所有言论都非常有效且非常重要。

【讨论】:

以上是关于无法弄清楚如何使用 NSTimer 更改视图的主要内容,如果未能解决你的问题,请参考以下文章

无法弄清楚如何返回部分视图而不是全部

无法弄清楚如何在同一 ScrollView 中的 WebView 上方添加自定义视图

在使用 React Router v5 和 Redux 时,无法弄清楚如何将 props 传递给组件

DataTables 可编辑无法弄清楚如何删除/更新行

自动布局:无法弄清楚如何解决与扩展 UITableViewCell 内的面板相关的警告

如何以编程方式创建带有约束的视图