如何重新加载我的UIViewController点击一些按钮?

问题描述:

我正在开发一个iPhone应用程序,我有一个UIViewController类,其中有一些coverflow动画在那里,根据设计我有一些5个按钮在我的视图上每个按钮有一个IBAction方法单击我需要显示不同的按钮具有不同数据的覆盖流集合以及覆盖流计数也从1个按钮动作变为另一个。我的问题是如何刷新我的网页(重新加载)点击这些按钮,因为我知道明确调用viewDidLoad是一个非常糟糕的主意,所以我怎么能做到这一点?提前感谢任何帮助,谢谢。如何重新加载我的UIViewController点击一些按钮?

获取视图重绘自身的最简单方法是调用[UIView setNeedsDisplay]或使用[UIView setNeedsDisplayInRect]。这个方法告诉视图它需要重新绘制自己和它的子视图。但是,你不应该总是这样称呼它。还有其他方法可能导致视图重绘自己。例如,如果使用[UIView addSubview:]或[UIView removeFromSuperview]将视图添加或删除到视图层次结构中。

这些方法会导致系统调用视图的drawInRect:方法(假设您用自定义绘图代码覆盖它)。如果您没有为自定义绘图覆盖此方法,那么它应该会导致您的子视图接收相同的消息,以便他们有机会重绘。

此处的更多信息。请特别阅读标注为“查看绘图循环”的部分。

http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html

你为什么要重新加载页面?如果是因为你正在改变你的观点,你希望它被重新绘制,您可以拨打:

setNeedsDisplay(); 

但往往是没有必要,因为每当视图边界发生变化时自动为您调用。

+0

真棒一个帮助很多 – Yohan

使用功能viewWillAppear中()。该功能被称为每次视图被调用。

+2

viewWillAppear中上查看的负荷运行,它不启动重新加载/刷新。使用[self.view setNeedsDisplay]; – Vincent

如果有太多其他的东西,而不是刷新/重新加载你对viewDidLoad方法感兴趣的部分,你可以将刷新的部分提取到一个私有方法中,比如methodA。每次你点击你的按钮,你都会调用该方法A。不过,我认为methodA仍然需要调用setNeedsDisplay或重新绘制您感兴趣的部分。希望能帮助到你。

如果你的一点是要刷新 “的UIViewController”,则:

[self viewDidLoad]; 

来源:How to refresh UIViewController programmatically?

To Refresh your UIViewController, When Clicking the button >> 

Add the below code into your UIButton method, 

-(IBAction)button:(id)sender{ 
    [self viewDidLoad]; 
    [self viewWillAppear:YES]; 
} 

Now Build and Run Your Code. 
+2

这些是不应该由您自己的代码调用的生命周期方法。 – nobre

+0

那么你怎么刷新视图控制器?请解释@nobre – NandhaKumar

+0

这取决于上下文。 OP提到了一些可能使用委托/数据源系统来提供内容的自定义覆盖流实现,所以最好使用自己的失效机制,例如reloadData。一般来说,你应该将你在viewDidLoad或viewWillAppear中使用的代码提取到另一个方法中,并在需要时调用该代码。请记住,自定义约束不能再次添加。您可以从元素中移除FromSuperview并再次添加它。 – nobre