-1

我有一个视图控制器,我需要自己刷新它,所以我基本上用以下代码重新加载它。

   -(void)check{
   GameController*myNewVC = [[GameController alloc] init];
   [self presentModalViewController:myNewVC animated:NO];
     }

我可以在游戏控制器中调用上面的方法,它工作正常,但在按钮子类中我使用下面的方法,它不起作用,因为没有任何反应。

。H

  @interface CellButton : UIButton {
     }

.m

  GameController*myNewVC = [[GameController alloc] init];
       [myNewVC check];

我该怎么做才能让它工作?

4

1 回答 1

1

我有一个视图控制器,我需要自己刷新它,所以我基本上重新加载它

不要那样做。您的视图控制器不是在刷新自己,而是在替换自己,很难想出它应该这样做的理由。

将加载数据的代码放在一个单独的方法中,并在现有视图控制器上调用该方法,而不是创建一个全新的视图控制器。例如,许多管理 UITableView 的视图控制器将调用 table 的-reloadData方法来告诉 table 丢弃当前可见的任何单元格并请求新的单元格。无论您的视图控制器管理哪种视图,您都可以执行类似的操作。

我可以在游戏控制器中调用上面的方法,它工作正常,但在按钮子类中,我使用下面的方法,它不起作用,因为没有任何反应。

这很可能是因为您说您正在使用 UIButton 子类中的代码,并且代码说:

[self presentModalViewController:myNewVC animated:NO];

所以,按钮告诉自己呈现视图控制器。但是, UIButton 没有presentModalViewController:animated:方法。我很惊讶“什么都没有发生”——由于未实现的方法,我预计会出现异常。如果您用self指向视图控制器的指针替换上面的内容,它应该可以正常工作。或者,更好的是,将代码放在视图控制器的 IBAction 方法中,将按钮操作设置为该方法,并将其目标设置为视图控制器。

(根据您的评论...)

按钮类中有一个函数可以指示天气,或者视图控制器是否会自行刷新。

这听起来像是一个糟糕的计划——在设计良好的 MVC 应用程序中,控制视图控制器是否刷新的逻辑属于视图控制器。让视图控制器根据控制刷新行为的任何条件启用/禁用或显示/隐藏按钮。

于 2013-07-08T16:29:43.873 回答