簡體   English   中英

UIViewController 和 XIB 問題

[英]UIViewController and XIB question

如何防止 UIVIewController 加載 xib?

我在線下載了一個 XCode (iPhone) 項目,我想停止加載 xib 文件。 視圖確實加載方法中沒有任何處理 xib 的代碼。 如何強制從它的 viewDidLoad 方法而不是 xib 加載 UIViewController?

覆蓋 loadview 但不要調用 [super loadview]。 例子:

-(void)loadView{
    self.view = [UIView new];
    [self.view setBackgroundColor:[UIColor redColor]];
}

從文檔

加載視圖

創建 controller 管理的視圖。

你不應該直接調用這個方法。 視圖 controller 在請求視圖屬性但當前為 nil 時調用此方法。 如果您手動創建視圖,則必須覆蓋此方法並使用它來創建視圖。 如果您使用 Interface Builder 創建視圖並初始化視圖控制器——即使用 initWithNibName:bundle: 方法初始化視圖,直接設置 nibName 和 nibBundle 屬性,或者在 Interface Builder 中創建視圖和視圖 controller——那么你不能重寫這個方法。

此方法的默認實現會查找有效的 nib 信息並使用該信息來加載關聯的 nib 文件。 如果沒有指定 nib 信息,默認實現會創建一個普通的 UIView object 並將其作為主視圖。

如果您重寫此方法以手動創建視圖,您應該這樣做並將層次結構的根視圖分配給視圖屬性。 (您創建的視圖應該是唯一的實例,並且不應與任何其他視圖共享 controller object。)此方法的自定義實現不應調用 super。

如果要對視圖執行任何其他初始化,請在 viewDidLoad 方法中執行此操作。 在 iOS 3.0 及更高版本中,您還應該重寫 viewDidUnload 方法以釋放對視圖或其內容的任何引用。

嘗試將initWithNibNameOrNil方法更改為只是init 如果這不起作用,還可以通過取消注釋並在那里設置您的視圖來覆蓋loadView方法。

這是一個例子:

    - (id)init
    {
        self = [super init];
        if (self) {
            // Custom initialization
        }
        return self;
    }

    - (void)loadView {
    [super loadView];
    UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,460)];
    myView.backgroundColor = [UIColor redColor];

    self.view = myView;
    [myView release];
    }

編寫自己的 init 方法。 稍后,如果您需要 nib,您可以創建一個 UINib object,當您需要視圖時,您可以使用 instantiateWithOwner。

在創建視圖 controller 時使用init將阻止 nib 加載。 另一件事是將筆尖命名為視圖名稱以外的名稱 controller - 因為如果它們匹配,筆尖可以自動加載。 我使用 ViewControllerName_iPad 或 ViewControllerName_iPhone 並根據設備習慣創建所需的視圖。

從 xib 文件加載的代碼不在視圖 controller 本身的viewDidLoad方法中。

您通常應該在應用程序委托的didFinishLaunchingWithOptions:方法或 info.plist 文件中的NSMainNibFile條目下找到它。

也許我在這里叫錯了樹,但是 UIViewController 是否從 XIB 加載其視圖,因為加載 UIViewController 的 XIB 本身在視圖控制器的設置中設置了“NIB 名稱”?

例如加載 MainWindow.xib,查看您的視圖 controller。 Select 它,然后查看右側的 controller 設置視圖(第 4 個選項卡)。 其中一項設置是“NIB 名稱”。 只需將其設為空白即可停止視圖 controller 從該 XIB/NIB 加載其視圖。

暫無
暫無

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

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