![](/img/trans.png)
[英]Why doesn't UITableViewCell background color work (set in interface builder)?
[英]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.