2009-06-18 65 views
2

我已經在我的RootViewController(這是一個UITableViewController)下面的代碼。當點擊導航欄中的按鈕然後(在模擬器中)顯示下一個視圖時,將執行此代碼。但是,不顯示在TripDetailsController管理的視圖中繪製的子視圖(UITextLabels,UIButtons)。此外,在屏幕頂部的導航欄中,原始視圖的「後退」按鈕不會顯示,但當我單擊導航欄的左側時,它會切換回原始視圖。未使用initWithNibName從NIB加載的子視圖

  • TripDetailsController.view被鏈接到TripDetailsView(UIView的)在界面生成器
  • tdController確實有一個值,所以看起來好象它被加載
  • TripDetailsController是在一個單獨的NIB文件
  • 使用iPhone SDK 2.2.1(所以不是3.0還)

代碼:

TripDetailsController *tdController = [[TripDetailsController alloc] 
        initWithNibName:@"TripDetailsController" bundle:nil]; 
[self.navigationController pushViewController:tdController animated:YES]; 
[tdController release]; 

在TripDetailsController I類添加viewDidLoad方法是這樣的:

代碼:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.navigationItem.title = @"Reis Details";  

    NSLog(@"Subviews: %@", self.view.subviews); 
    UILabel *l = [self.view.subviews objectAtIndex:0]; 
    NSLog(@"Subview 0 bounds: %@", l.bounds); 
} 

下面的消息都表明,子視圖是有的,但也認爲邊界未設置日誌:

代碼:

6/18/09 Jun 18, 2009 10:06:00 PM ReisAdvies[11226] Subviews: (
    <UILabel: 0x56f250>, 
    <UILabel: 0x56f5a0>, 
    <UILabel: 0x56f6b0>, 
    <UILabel: 0x56f780> 
) 
6/18/09 Jun 18, 2009 10:06:00 PM ReisAdvies[11226] Subview 0 bounds: (null) 

在界面生成器的 「標籤大小」 標籤不顯示值X/Y/W/H。感覺就像我必須觸發它來做一些佈局活動,但在viewDidLoad()中調用layoutSubviews並沒有幫助。 任何想法可能是這裏的問題?

回答

2

實測值的溶液,在界面生成器:

  1. 在NIB文件我沒有包括的UIWindow,所以增加了一個的UIWindow到筆尖文件並將TripDetailsController.view出口連接到新添加的UIWindow。
  2. 文件的所有者視圖屬性連接到TripDetailsView(的UIView)
  3. 文件的所有者類設置爲UIViewController中

現在按預期工作。

不是100%確定,如果這是'做到這一點'的方式,但至少它似乎對我有用。

+0

這是方法,但它應該已經由xcode自動完成了,如果你讓它爲你生成xib – slf 2009-06-18 20:39:26

0

您導航到子視圖的方式對我來說通常看起來很好。唯一我要提到的是你的[TripDetailController-loadView]消息。我從來沒有做過這樣的事情。 Normall只是將一些狀態信息傳遞給依賴控制器,然後將其添加到依賴標準機制(即viewDidLoad)來初始化控制器邏輯的UINavigationController中。

你會收到一個-viewDidLoad消息嗎?你的控制器在那個時候運行起來了嗎?

可能它是一個微妙的佈線問題/類型在您的項目的某個地方。

+0

我添加了loadView調用,因爲它被認爲是一種可能的解決方案。它在這裏沒有任何效果,所以我將它從原始問題中刪除。 是的,TripDetailsController dos接收viewDidLoad消息。所以我假設TripDetailsController已啓動並正在運行。 我也有這種感覺,這是一個微妙的佈線問題,但一直未能發現它... – Gero 2009-06-18 07:22:36

1

我在你的代碼注意到的第一件事是,你調用像一個函數:

tdController.loadView; 

據我所知,這是不能在Objective-C來完成。你要這樣稱呼它:

[tdController loadView]; 

而且,你在哪裏做你的initialiation?在「loadView」中,在「viewDidLoad」中?

嘗試添加控制器在屏幕上像這樣的東西(推意見,而不是ViewControllers):

[self.view insertSubview:tdController.view atIndex:0]; 

上面的代碼假設它裏面另一個UIViewController子類運行,即加載你的控制器的視圖到它的自己的觀點作爲子視圖。

+0

我試圖添加像你所描述的視圖,但沒有任何(可見)的影響。 – Gero 2009-06-18 19:18:16

1

此外,在屏幕的頂部 導航欄,「返回」按鈕, 原來的觀點並沒有顯示,但 當我點擊 導航欄它的左側將 轉換回原始視圖。

您是否爲您的navigationItem設置了標題?

例如,在TripDetailsController viewDidLoad中

self.navigationitem.title = @"trip detail"; 
+0

當我這樣做時,標題出現了。其餘的控件不顯示。 我假設因爲我在INterface Builder中放置了視圖,所以我不必在TripDetailsControllers的viewDidLoad方法的代碼中添加UITextLabels等。或者我還必須在那裏編碼? 如果是這樣,在Interface Buildes中設計視圖的價值是什麼? – Gero 2009-06-18 11:36:52

0

下面是我工作......

從廈門國際銀行剝離出來窗口和ViewControl並取得文件的所有者我的viewController類,然後連接文件所有者以我的看法。

做了負載initWithNibName ...

新來iPhone開發和我有多少種方法可以掛在自己疲憊不堪IB一點點。

相關問題