2014-05-06 75 views
0

我有一個主視圖,如圖所示。我添加了2個子視圖,每個都有自己的視圖控制器。如果從另一個類中調用removeFromSuperview不起作用

ipadMainViewController

self.dTVC= [[dialoguesTableViewController alloc] initWithNibName:@"dialoguesTableViewController" bundle:nil]; 
[self.dTVC.view setFrame:rectFordTVC]; 
[self.view addSubview:self.dTVC.view]; 

在那之後,我想,如果我在CategoriesViewController按一個按鈕來刪除的dialoguesTableViewController的看法。但是,我無法刪除它。 在CategoriesViewController,我這樣寫,但dialoguesTableViewController不能從ipadMainViewController刪除。我該怎麼做?

CategoriesViewController,我寫這樣的代碼,但它不工作。

self.dTVC= [[dialoguesTableViewController alloc] initWithNibName:@"dialoguesTableViewController" bundle:nil]; 
[self.dTVC.view removeFromSuperview]; 

enter image description here

+0

使用NSNotificationCenter或該類 –

+0

創建委託'self.dTVC'不從另一個類做。我希望你需要通過'UISplitViewController'。 –

+0

或者只是使用消息傳遞協議(方法)從另一個類中刪除視圖。 –

回答

2

因此,有幾個方法如何做到這一點:

第一種方式:

添加觀察員ipadMainViewController初始化方法或viewDidLoad方法這取決於你的需求。

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

添加-buttonPressed方法ipadMainViewController控制器刪除您的視圖或其他您的目的。

- (void)buttonPressed 
{ 
    // remove view here 
} 
在當你點擊相應的按鈕添加以下代碼的方法CategoriesViewController

[NSNotificationCenter defaultCenter] postNotificationName:@"kNotificationDidPressedButon" 
                object:self]; 

方式二:

委託屬性添加到CategoriesViewController。你可以找到信息如何使代表例如這裏:link

第三條道路:

使用Objective-C的塊

爲初學者初步意見:

我建議你從第一種方式開始,因爲它是最容易理解的。您還必須刪除ipadMainViewControllerr中的觀察者,方法爲-dealloc-viewWillDisapper,這取決於您添加觀察者的位置,例如,在-init方法或-viewDidLoad-viewWillAppear回調;

[[NSNotificationCenter defaultCenter] removeObserver:self];

+0

謝謝。我現在使用委託。 :) –

+0

好吧,我認爲這是更專業的方式。但這取決於任務,但在你的情況下,我建議你使用委託或阻止。這取決於你,只要確保委託對象響應選擇器 –

0

試試這個....

添加下面的代碼,你可以刪除視圖

-(void)viewDidLoad{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(removeFromSuperview) name:@"REMOVE" object:nil]; 
} 
-(void)removeFromSuperviev{ 

    [view removeFromSuperview]; 
} 

添加以下代碼的形式,你需要刪除

[[NSNotificationCenter defaultCenter] postNotificationName:@"REMOVE" object:nil]; 
相關問題