簡體   English   中英

為什么不能在Interface Builder中設置自定義UIView的背景顏色?

[英]Why can't I set the background color of my custom UIView in Interface Builder?

我將深入研究iOS開發,並從一個非常簡單的示例開始,以了解如何使用IB創建自定義視圖。 我有一個簡單的視圖控制器...

@interface MyViewController ()
@property (weak, nonatomic) IBOutlet MyView *myView;
@end

@implementation MyViewController
//Boilerplate code...

還有我的自定義視圖

@implementation MyView

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.backgroundColor = [UIColor redColor];
    }
    return self;
}

然后在應用程序委托中,將根視圖控制器設置為MyViewController ...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    MyViewController *myVC = [[MyViewController alloc] init];
    self.window.rootViewController = myVC;
    [self.window makeKeyAndVisible];
    return YES;
}

因此,我為MyViewController了一個筆尖,為MyView了一個筆尖。 在MyViewController的筆尖中,我將UIView拖到其中心,並將該視圖的類設置為MyView 當我運行該應用程序時,我會看到帶有紅色背景色的MyView視圖。 這是我的問題:當我注釋掉MyView實現文件中的代碼行時,該代碼行將背景色設置為紅色,而使用MyView的筆尖在界面構建器中將背景色設置為其他顏色,視圖是白色的。 為什么不能在Interface Builder中設置MyView的背景顏色? 為什么只有通過編程設置它才能設置?

在此先感謝您的智慧!

最終非常簡單,但是有些棘手。

您需要意識到一個重要的事實。 您在Interface Builder中看到的是對象的“凍結實例”。 它們在初始化時被各自的所有者類別喚醒。

仔細考慮您已建立的關系以及初始化期間發生的步驟。 您的VC被設置為根視圖控制器。 這意味着,在屏幕上可以看到VCs nib文件的內容,即兩個視圖(UIview類實例)1)ViewController的視圖2)另一個UIview(將其類設置為MyView)。

現在,如果您在MYview.m中覆蓋initWithCoder,則它會被執行並且顏色設置為紅色,這是因為您在VC中設置了UIview的2)(在那里)實例,nib是自定義類ieMyView。

另一方面,如果轉到MYView nib文件,您可以在此處設置所需的任何內容,但不會在屏幕上看到它。 為什么? 因為此實例永遠不會喚醒。 它只是位於項目中而不使用的nib文件。 您在屏幕上看到的實例是來自主VC視圖(即其子視圖)的實例。

基本上,您有1個接口文件MyView.h,1個實現文件MYView.m和兩個此類的實例。 兩者都冷凍在筆尖中。 一個在VC的筆尖中,另一個在MyView.nib中。 您只是不使用MyView.nib。

進行此工作的解決方案不在您的問題范圍內。

暫無
暫無

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

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