簡體   English   中英

在UIView中作為子視圖調用UIViewController視圖時出現問題

[英]Issue in calling UIViewController view as subview in UIView

我在一個項目中實現了第三方控制器MDSpreadView 我只是簡單地包含了與之相關的每個文件,包括xib。 稱為子視圖。

調用視圖的層次結構是這樣的:有一個uiviewcontroller,其中我將UIView添加為子視圖,並且從該子視圖中,我將uiviewcontroller稱為子視圖。

     MDViewController *MDvc = [[MDViewController alloc]initWithNibName:@"MDViewController_iPhone" bundle:nil ];
     [self addSubview:MDvc.view];

看起來不錯,但是當我觸摸滾動或選擇內容時,選擇代表就會發生Thread 1:EXC_BAD_ACCESS錯誤。 而委托是按演示項目中的原樣實現的。

這是圖像

我知道在調用子視圖時存在一些問題。 我該如何解決?

從一個控制器中取出一個視圖並將其作為子視圖插入到另一個控制器中的想法是導致崩潰的常見原因。 如果必須這樣做,請確保未釋放原始控制器(在這種情況下為MDViewController )。 您可以通過使其成為劫持其視圖的對象的強大屬性來做到這一點,或者更好地查看文檔以了解如何實現容器控制器。

最后,了解如何處理多個視圖,尤其是當您有子視圖和viewcontroller時。 解決方案非常簡單,在這種情況下,您需要有代表,否則蘋果公司給自己帶來的一件偉大的事情就是NSNotification。 我確實通過NSNotification解決了我的問題。 在按鈕上按下(我必須從那里調用其他視圖),我發布這樣的通知:

     [[NSNotificationCenter defaultCenter] postNotificationName:@"WhatEverYouWantTocallIt" object:nil];

我在需要調用的類中添加了觀察者,如下所示:

     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(bringSpreadViewToFront) name:@"WhatEverYouWantTocallIt" object:nil];

並且添加了一個選擇器,在選擇器中您應根據您有的情況處理它:

-(void)bringSpreadViewToFront {

NSArray *viewsToRemove = [self.view subviews];
for (UIView *v in viewsToRemove) {
    [v removeFromSuperview];
}

MDViewController *md = [[MDViewController alloc] initWithNibName:@"MDViewController_iPhone" bundle:nil];


    [self presentViewController:md animated:YES completion:nil];

}

我首先一個一個地刪除了子視圖,然后介紹了我的視圖控制器,並提出了自己的選擇。 它的工作原理很完美。

謝謝菲利普(Phillip)向我逼近解決方案的方向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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