[英]change Subview of superview through IBAction of Subview ios
我试图在这里找到解决方案但无法找到,基本上我有一个交互式子视图,我需要从子视图中切换到一个新的交互式子视图。 我可以在主视图中使用 IBAction 轻松更改子视图,但我一直未能从子视图中更改视图。 这是代码......这应该使我想要完成的工作更加清晰。
MainViewController 的 in.h
@interface MainViewController : UIViewController {
IBOutlet OneViewController *oneviewController;
IBOutlet TwoViewController *twoViewController;
}
-(IBAction)goToView;
@property (nonatomic, retain) IBOutlet OneViewController *oneviewController;
@property (nonatomic, retain) IBOutlet TwoViewController *twoViewController;
@end
英寸
@implementation MainViewController
@synthesize oneviewController;
@synthesize twoViewController;
-(IBAction)goToView {
[self.view addSubview:twoViewController.view];
}
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:oneviewController.view];
}
好的,这一切都很好,我可以使用 xib 加载两个 ViewController,并且它们的所有按钮都可以工作等等。..
但是当我尝试...
OneViewController 的 in.m
#import "MainViewController"
...
[MainViewController.view addSubview:twoViewController.view]; ...
这不起作用,我尝试了各种方法,通过将 twoViewController 添加到 oneViewController 的.h 中,但它崩溃了......我对这一切仍然很陌生,所以很可能我错过了明显的东西。 感谢帮助!!
我也在 OneViewController 的.m 中试过这个
但它仍然崩溃......虽然构建成功
MainViewController* mySuperView = (MainViewController*)self.view.superview; TwoViewController *twoViewController; [mySuperView.view addSubview:twoViewController.view];
这个动作是在错误的地方进行的。 如果您尝试向 MainViewController 添加子视图,您应该在 MainViewController.m 中处理它。 您正在调用:
[MainViewController.view addSubview:twoViewController.view];
但 MainViewController.view 是视图的 static 实例。 如果您想保持原样,并假设 OneViewController 已经是 MainViewController 上的子视图,您应该执行以下操作:
UIView *main = [OneViewController.view superview]; [主addSubview:twoViewController.view];
不过,这非常危险,因为不能保证您对此视图有超级视图。 我只是在 MainViewController 中处理所有这些。 没有 controller 应该有权将子视图添加到另一个 controller,除非它具有 MainViewController 的实例。
以下代码有效,但它给了我1个警告......
在我的子视图中,OneViewController.m(在 IBAction 下)...
{for (UIView* next = [self.view superview]; next; next = next.superview) {
UIResponder* nextResponder = [next nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]]) {
[(UIViewController*)nextResponder resetSubView];
}`
在我的 MainViewController.m
- (void) resetSubView { [self.view addSubview:twoViewController.view]; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.