2013-07-08 117 views
-1

我有一个视图控制器,我需要自我刷新,所以我基本上用下面的代码重新加载它。如何在这种情况下切换视图控制器

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

我可以调用该方法在上面gamecontroller,它工作正常,但在一个按钮子类我使用下面的方法,它不工作,因为没有任何反应。

.H

@interface CellButton : UIButton { 
    } 

.M

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

我能做些什么来得到这个工作?

+1

为什么创建一个全新的视图控制器,当你可以告诉你必须刷新自己? – Caleb

+0

请定义“不起作用” – jrturton

+0

按钮类中有一个函数可以决定天气否则视图控制器将自行刷新它。我宁愿这样保持它的组织方面的原因。 –

回答

1

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

不要那样做。您的视图控制器不是提醒自己,它正在取代自己,很难想到它应该需要这样做的理由。

把代码加载到一个单独的方法中的数据,并在现有的视图控制器上调用该方法,而不是创建一个全新的视图控制器。例如,许多管理UITableView的视图控制器会调用表的-reloadData方法来告诉表格放弃当前可见的任何单元格并请求新单元格。无论视图控制器如何管理什么样的视图,都可以做类似的事情。

我可以调用该方法在上面gamecontroller,它工作正常,但在 我用下面的方法的按钮子类,因为没有任何反应它不工作 。

那是因为你说你正在使用的代码在一个UIButton子类,代码表示,最有可能是:

[self presentModalViewController:myNewVC animated:NO]; 

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

(从您的评论...)

有Button类的功能,这将决定天气或不 视图控制器将刷新它的自我。

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

+0

为了清楚起见,我刷新的控制器会自动加载它。好像有人将视图控制器中的按钮挂钩到自身一样。 –