簡體   English   中英

通過Subview ios的IBAction改變superview的Subview

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM