我是iOS开发的新手。我有一个非常简单的UIViewController,在视图中有两个按钮。我允许用户编辑UI组件或从一个地方拖放到另一个地方。现在我想实现重置功能,允许用户将UI重置为原始阶段,丢弃所有更改。
正如几篇文章中提到的尝试过的setNeedsDisplay,但看起来它的实现方式并不正确。我有什么选择?
e.g。 在Android世界中,您可以完成当前的Activity(等效于UIViewController)并重新启动self以实现原始状态。是否可以在iOS中执行类似的操作。
- (IBAction)resetButtonClicked:(id)sender {
// Now I want discard all the changes on the screen
// On some button click or specific action from user.
// Tried calling setNeedsDisplay as pointed in few others answers but somehow
// setNeedsDisplay does not reload my ViewController.
// [self.view setNeedsDisplay];
}
答案 0 :(得分:1)
我做了类似的事情。我做的是:
1)为每个帧ui控件创建本地CGRect变量,即CGRect originalFrame1;
2)获取每个ui控件的原始帧位置并将它们存储在viewDidLoad上,即originalFrame1 = _frame1.frame;
3)在resetButtonClicked上将其设置回原始位置_frame1.frame = originalFrame1;
答案 1 :(得分:0)
我可以想到两个选择:
1-保存初始状态的位置,当用户点击重置按钮时,只需将这些按钮置于其初始状态。
2-OR(这样做的奇怪方式),你可以初始化你所在的同一个控制器并从它自己出来,这应该以某种方式接近你的android方法。你将在初始状态下获得相同的控制器(如果你没有解雇第一个,你应该)
希望有所帮助:)
答案 2 :(得分:0)
你可以在主视图中保存所有子视图(按钮,标签......)的位置。
self.view.subview
它将返回包含所有元素的数组:)
当你想要休息时,只需从阵列中获取每个子视图的旧位置。
NSArray *arrayOfView = [view subviews];
//also:
NSMutableArray *mutableArrayOfView = [[view subviews] mutableCopy];
for (UIImageView *imageView in imageViewArray) //uiimageview or whatever your subview //is you can check by using isKindofClass. `if ([view isKindOfClass:[UIImageView class]])`
{
//let's set frame for image view before adding to
[myimageView setFrame:imageview.frame];//or something like that
}
答案 3 :(得分:0)
EVery应用程序将有一个 keyWindow 对象,您应该为其指定一些要显示的viewController。
window.rootViewController = [[UIViewController alloc] init];
让我们说你的控制器类是 CustomViewController
所以,在你的app委托中, didFinishLaunchingWithOptions ,你会写
self.window.rootViewController = [[CustomViewController alloc] init];
点击重置按钮时调用的功能如下,
-(void)reset{
// reset the view with default
self.view.window.rootViewController = [[CustomViewController alloc] init];
}
如果您遵循上面的代码,它将不会有任何内存泄漏,因为当您再次设置rootViewController时,旧的将丢失并从内存中删除。