2012-04-01 56 views
1

我需要將UIView推入我的UINavigation controller。我被從UIView推UIViewController

[self.view addSubview:showContactFlow]; 

並點擊一個按鈕中的UIView,我需要在UIView推另一UIViewController中這樣做。從UIView我無法訪問self.navigationcontroller我該怎麼做?

編輯:

我已經設置了UIView爲新UIViewController我推到,在提到UIViewController前視圖。現在我想知道,如何處理UIViewController中的UIView按鈕事件,其中設置了該視圖。

+1

標準的動畫這不是正確的方式做這件事,視圖和視圖控制器是不同類型的對象。視圖控制器確實有一種uiviews沒有的層次結構。你實際上無法從普通的視圖控制器中推導出導航控制器(在ios5中,你可以做到這一點,但在邏輯上不正確)。您需要在視圖控制器內部創建一個您想要顯示的uinavigationcontroller,然後以模態方式顯示它。如果你只是想模擬推動畫的行爲,你可以簡單地使用核心動畫或者只是使用uiview的動畫。 – Andrea 2012-04-01 13:55:16

+0

好的。我知道了。我只想知道,我如何從其父'UIViewController'處理'UIView's'按鈕事件。 – 2012-04-02 04:19:53

+0

哈維你可以嘗試解釋更好的問題,因爲我沒有得到你如何設置應用程序。因爲對我來說,push意味着'[self.navigationController pushViewController:vc animated:YES]'的動作。我沒有得到它,對不起 – Andrea 2012-04-02 09:01:07

回答

1

將一個UINavigationController ivar添加到UIView並將其分配給主視圖控制器。那麼你應該可以從UIView訪問它。

編輯:

您UIView子類:

// CustomView.h 
@interface CustomView: UIView { 
    // ... 
    // your variables 
    // ... 
    UINavigationController *navController; 
} 

@property (nonatomic, assign) UINavigationController *navController; // assign, because this class is not the owner of the controller 

// custom methods 

@end 

// CustomView.m 
@implementation Customview 

// synthesize other properties 
@synthesize navController; 

// implementation of custom methods 

// don't release the navigation controller in the dealloc method, your class doesn't own it 

@end 

然後前[self.view addSubview:showContactFlow];線只需添加[showContactFlow setNavController:[self navigationController]];,然後你應該能夠從您的UIView訪問您的層次結構的導航控制器,並用它來推動其他UIViewController s。

+0

能否再詳細解釋 – 2012-04-01 10:18:48

+0

將'UINavigationController'成員添加到您的'UIView'類,並將其添加到視圖控制器的導航控制器,然後再將視圖添加爲子視圖。然後你將可以訪問它。 – Alexander 2012-04-01 11:06:48

+0

我不知道該怎麼做。你可以請出示嗎? – 2012-04-01 11:22:07

0

您應該嘗試使用MVC方法。所以你的控制器可以訪問所有的東西,並可以繼續推送和彈出視圖,所以視圖不需要太瞭解控制器。

否則,對於這種情況下,您可以通過使用代表團快速解決它。所以:

showContactFlow.delegate = self; 
[self.view addSubview:showContactFlow]; 

所以後來在UIView,你可以說:

[self.delegate addSubview:self]; 

這是要去工作,但它不太可能是你應該使用的最佳方法。

0

在點擊按鈕,就能呈現一個視圖控制器一樣,

-(void)buttonFunction{ 
      ThirdVC *third= [[ThirdVC alloc]initWithNibNme];...... 

      [self presentViewController:third animated:NO]; 


    } 

使用核心動畫可以讓NavigationController的pushviewController喜歡動漫在ThirdVC的viewWillAppear中編寫代碼:方法。

+0

自我找不到稱爲'presentViewController'的方法 – 2012-04-01 11:06:56

0

你在哪添加UIButton它是在showContactFlow視圖還是在ViewController的視圖中?

在關於modalViewControllers發出正確的方法是

[self presentModalViewController:viewController animated:YES]; 

在向上