gpt4 book ai didi

iOS 在 Storyboard中切换嵌入式 View

转载 作者:可可西里 更新时间:2023-11-01 03:30:10 26 4
gpt4 key购买 nike

我一整天都在尝试解决这个问题,我知道它应该能够完成,但是作为使用 Objective-C 而不是 Appcelerator 进行 iOS 开发的新手,我遇到了新手问题。

我想要完成的是在我的其他 View 之一中有一个嵌入式 View ,但能够通过编程切换嵌入哪个 View 。我正在使用 Storyboard。当我尝试使用 View 容器时,它会显示附加 View ,但我无法将多个 View 附加到 Storyboard 中的容器。我画了一张图片,但令我烦恼的是我不能在这里发布图片,因为我没有足够的“rep”点数,所以我将它发布在我的网站上: http://static.c6gx.com/images/iphone-embedded-views-diagram.jpg

稍后我想要在那个 View 容器中看起来像是一个推送 segue,但首先我只想能够在嵌入式 View 1、2、3 等之间切换。我应该使用 View 吗容器来完成这个,或其他类型的 Controller ?那我怎么调用转换来改变 View 呢?

感谢您提供的任何帮助。

最佳答案

您可以像使用容器 View Controller 一样切换 View Controller 。我做了一个项目,我在其中添加了一个容器 View (实际上是 2 个,但我们在这里只处理一个),并将这段代码添加到当您拖入容器 View 时自动获得的嵌入式 Controller 。我要切换到的 Controller NewRightController 是 UIViewController 的子类——在 Storyboard 中,我将 Controller 的大小设置为“自由形式”,并更改 View 的大小以匹配嵌入式 Controller View 的大小。这实际上并不会影响 View 的大小(它仍然记录为全屏),它只是让 subview 的布局变得更容易。

-(IBAction)switchToNewRight:(id)sender {
UIView *rcView = [(ViewController *)self.parentViewController rightView]; // rcView is the right container view in my root view controller that self is embedded in.
NewRightController *newRight = [self.storyboard instantiateViewControllerWithIdentifier:@"NewRight"];
newRight.oldRightController = self; // pass self to new controller so I can come back to the same instance
newRight.view.frame = rcView.bounds;
[self.parentViewController addChildViewController:newRight];
[self moveToNewController:newRight];
}

-(void)moveToNewController:(UIViewController *) newController {
UIView *rcView = [(ViewController *)self.parentViewController rightView];
[self willMoveToParentViewController:nil];
[self.parentViewController transitionFromViewController:self toViewController:newController duration:1 options:UIViewAnimationOptionTransitionCurlUp animations:^{}
completion:^(BOOL finished) {
[self removeFromParentViewController];
[rcView constrainViewEqual:newController.view];
[newController didMoveToParentViewController:self];
}];
}

经过大量实验后我发现,让 View 大小合适并在旋转后适当调整大小的方法是最初将新 Controller View 的框架设置为容器 View 的边界,但在过渡动画之后,向新 View 添加约束以在旋转后立即保持其大小。由于这段代码可能会被反复使用,所以我将它放在 UIView 的一个类别中,使用一种方法 constrainViewEqual:。这是相关代码:

-(void)constrainViewEqual:(UIView *) view {
[view setTranslatesAutoresizingMaskIntoConstraints:NO];
NSLayoutConstraint *con1 = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeCenterX relatedBy:0 toItem:view attribute:NSLayoutAttributeCenterX multiplier:1 constant:0];
NSLayoutConstraint *con2 = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeCenterY relatedBy:0 toItem:view attribute:NSLayoutAttributeCenterY multiplier:1 constant:0];
NSLayoutConstraint *con3 = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeWidth relatedBy:0 toItem:view attribute:NSLayoutAttributeWidth multiplier:1 constant:0];
NSLayoutConstraint *con4 = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeHeight relatedBy:0 toItem:view attribute:NSLayoutAttributeHeight multiplier:1 constant:0];
NSArray *constraints = @[con1,con2,con3,con4];
[self addConstraints:constraints];
}

关于iOS 在 Storyboard中切换嵌入式 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13483992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com