2009-12-23 2 views
0

Я добавляю пользовательскую кнопку/клавиатуру в свое приложение. До сих пор у меня есть подкласс UIImageView, который содержит анимацию, которая сдвигает ее снизу экрана, а затем возвращается вниз, когда пользователь больше не нуждается в ней. Однако у меня возникают проблемы с добавлением UIButtons в этот UIImageView.Проблема добавления subviews (UIButtons) в подкласс UIImageView

Поскольку это подкласс UIView, я пытаюсь добавить кнопки к моему виду с помощью метода initWithFrame :. (Метод slideDown добавленная анимация)

в моей UIImageView Подкласс, я добавил объект Ивар UIButton:

-(id)initWithFrame:(CGRect)frame { 

    if (self = [super initWithFrame: frame]) { 
    UIButton *button = [UIButton buttonWithType: UIButtonTypeRoundedRect]; 
    button.frame = CGRectMake(16.0, 20.0, 50.0, 50.0); 
    [button setTitle: @"Go" forState: UIControlStateNormal]; 
    [button addTarget: self action: @selector(slideDown) forControlEvents: UIControlEventTouchUpInside]; 
    self.button1 = button; 
    [self addSubview: button1]; 
    NSLog(@"Button added"); 

} 
return self; 
} 

На мой взгляд контроллера, я экземпляр моего UIImageView Подкласс в - (пустоты) viewDidLoad: метод следующим образом:

-(void)viewDidLoad { 
//other objects init'ed 

ButtonPad *customPad = [[ButtonPad alloc] initWithImage: [UIImage imageNamed: @"ButtonPad.png"]]; 
customPad.frame = CGRectMake(0.0, 480.0, 320.0, 300.0); 
self.buttonPad = customPad; 

[self.view addSubview: buttonPad]; 
[customPad release]; 

[super viewDidLoad]; 
} 

Мое текущее приложение позволяет просматривать слайд вверх и вниз по экрану без каких-либо проблем. Однако кнопка никогда не появляется. Я также попытался добавить кнопку к моему объекту buttonPad, создав экземпляр &, добавив его как subView в buttonPad в моем файле контроллера. Это сработало ... но это не позволило кнопке функционировать.

Мне интересно: A.) Является ли уместным добавлять кнопки или любые подзадача в этом отношении в метод UIView initWithFrame: или я должен добавлять эти подзоны в качестве подзаголовка к моей кнопке в виде файла Controller? B.) Поскольку я создаю пользовательскую кнопку/клавиатуру, я следую действительному подходу, используя обычный UIViewController, или я должен использовать что-то вроде modal view Controller? (У меня есть немного знаний о них.)

+0

Я не думаю, что вы должны отпустить кнопку. + buttonWithType: должен предоставить вам автореализованный объект. –

+0

хорошо catch. Я изменил это, но все еще не вижу кнопки. Я пробовал и UIButtonTypeRoundedRect & UIButtonTypeCustom безрезультатно. –

ответ

1

Одна маленькая ошибка, которую я видел:

UIbutton *button = [[UIButton alloc] initWithFrame:CGRectMake(16.0, 20.0, 50.0, 50.0); 
button.buttonType = UIButtonTypeRoundedRect; 

добавить это где говорит:

UIButton *button = [UIButton buttonWithType: UIButtonTypeRoundedRect]; 

Эта ошибка вызывает кнопку, чтобы никогда не быть даже а также если он не работает, вам может понадобиться поместить кнопку внутри UIView. Надеюсь, это поможет.

+0

не используется: button.buttonType = UIButtonTypeRoundedRect; свойство только для чтения? Это то, что говорят документы. –

+0

Посмотрев на это снова, я вижу, что вы говорите, чтобы положить кнопку внутри UIView. Я смущен тем, что вы говорите, потому что это то, что я пытаюсь сделать; то есть добавить UIButton в UIView. Был ли ваш примерный код выше предложения, чтобы исправить это или привести мою ошибку? Спасибо за любое разъяснение, которое вы можете предоставить. –

+0

Я отредактировал свой ответ, который должен вам помочь. Я просто хотел, чтобы вы знали. То, что я воспринял UIView, было то, что вам нужно было добавить его в UIView, а не в UIImageView, потому что UIImageView - это изображение, и когда вы помещаете кнопку в изображение, это только изображение кнопки, а не удобство использования кнопки. Добавьте UIView и сделайте его анимацией с UIImageView и добавьте UIButton в UIView, чтобы у вас все еще была кнопка, и она может использоваться. – Jaba

1

Вы загружаете свой подкласс UIImageView из файла nib? Если вы, -initWithFrame: не вызывается, а -initWithCoder:.

То, что я обычно делаю это:

- (void)didInit { 
    // add your buttons here 
} 
- (id)initWithFrame:(CGRect)frame { 
    if (self = [super initWithFrame:frame]) { 
     [self didInit]; 
    } 
    return self; 
} 
- (id)initWithCoder:(NSCoder *)aDecoder { 
    if (self = [super initWithCoder:aDecoder]) { 
     [self didInit]; 
    } 
    return self; 
} 
+0

Я не использую файл nib .. так что это не проблема. –

+0

Просто убедитесь, что -initWithFrame фактически вызван. –

1

прорыв: Одна из проблем, я заметил, что на мой взгляд контроллера, я использую initWithImage для инстанцировании моего UIImageView вместо использования initWithFrame: который вызывает изображение для загрузки, но не для кнопки. Теперь кнопка появляется, но не работает.

вид файл контроллер теперь выглядит следующим образом:

-(void)viewDidLoad { 
//other objects init'ed here. 

ButtonPad *customPad = [[ButtonPad alloc] initWithFrame: CGRectMake(0.0, 480.0, 320.0, 300.0)]; 
customPad.image = [UIImage imageNamed: @"ButtonPad.png"]; 
self.buttonPad = customPad; 

[self.view addSubview: buttonPad]; 
[customPad release]; 

[super viewDidLoad]; 
} 

Это выделяет & инициализирует кадр, который использует перекрытый метод из моего UIImageView подкласса. Любая помощь в получении кнопки для работы будет принята с благодарностью.

7

Я думаю, что ваша проблема здесь в том, что UIImageView по умолчанию имеет свойство userInteractionEnabled.Вы можете попытаться просто добавить строку
customPad.userInteractionEnabled = true; к инициализации и установить.

+0

Да - это трюк: для использования UIButton, который находится внутри UIImageView, вам необходимо разрешить взаимодействие с пользователем в UIImageView. – joshis

+0

Я бы предложил удалить изображение, а затем проверить, что кнопка реагирует так, как вы ожидаете, чтобы убедиться, что это изображение вызывает проблему, а не кнопку. Затем вы захотите проверить ваши изображения и рамки кнопок/кадров, чтобы убедиться, что они правильны для выбора. –