установка собственного цвета фона UIView - PullRequest
3 голосов
/ 17 августа 2011

Я пытаюсь сделать это из .m пользовательского класса представления, который не загружается из XIB, а скорее программно:

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
    // Initialization code

    self.backgroundColor=[UIColor redcolor];
}
return self;
}

У меня один и тот же результат, независимо от того, поместил ли я цвет фона в initWithFrame или другие методы. свойство цвета фона не принимает. из контроллера, которому принадлежит этот пользовательский вид, я могу установить прекрасный цвет фона с помощью:

self.mycustomview.backgroundColor=[UIColor redcolor];

Но я бы хотел сделать это из самого настраиваемого представления, чтобы такие вещи оставались независимыми. и контроллер, и пользовательский вид импортируют UIKit.

Я также попробовал это, которое было доступно из Code Sense:

    self.View.backgroundColor=[UIColor redcolor];

но это тоже не работает. я попробовал и view и View здесь. Я уверен, что пропускаю что-то очень очевидное.

в контроллере вида у меня есть, и он работает нормально. пользовательский вид называется "mapButtons.h":

- (void)viewDidLoad
{
CGRect frame=CGRectMake(0, 0, 320, 460);
self.mapButtons=[[mapButtons alloc] initWithFrame:frame];
self.mapButtons.backgroundColor=[UIColor redColor];

[self.view addSubview:self.mapButtons];

.h пользовательского представления:

#import <UIKit/UIKit.h>

@interface mapButtons : UIView

Ответы [ 2 ]

5 голосов
/ 17 августа 2011

Если ваше представление создается из XIB (то есть вы добавили его в другое представление с помощью Interface Builder), -initWithFrame: не будет вызвано. Вместо этого объект, загружаемый из XIB, получает -initWithCoder:. Попробуйте это:

- (id)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];

    if(self)
    {
        self.backgroundColor = [UIColor redColor];
    }

    return self;
}
2 голосов
/ 17 августа 2011

Я снова проверил, и это полный источник того, что я делаю, который работает

// MapButtons.h
#import <UIKit/UIKit.h>

// As a note you normally define class names starting with a capital letter
// but I did test this with mapButtons as you had it
@interface MapButtons : UIView

@end

// MapButtons.m
#import "mapButtons.h"

@implementation mapButtons

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
      // Initialization code
      self.backgroundColor = [UIColor redColor];
    }
    return self;
}

@end

// TestAppDelegate.m
@implementation TestAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{  
    MapButtons *view = [[MapButtons alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    [self.window addSubview:view];

    [self.window makeKeyAndVisible];
    return YES;
}

Тот факт, что xcode не выполняет автозаполнение, странный, но у меня, кажется, периодически возникает эта проблема, поэтому я имеюнет реального решения.Иногда люди предлагают удалить полученные из проектов данные и перезапустить xcode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...