Проблема добавления подпредставлений (UIButtons) в подкласс UIImageView - PullRequest
0 голосов
/ 24 декабря 2009

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

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

в моем подклассе UIImageView добавлен объект ivar 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 в методе - (void) 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, создав его экземпляр и добавив его в качестве вспомогательного элемента в buttonPad в моем файле контроллера представления. Это сработало ... но не позволило кнопке функционировать.

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

Ответы [ 4 ]

7 голосов
/ 07 мая 2010

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

1 голос
/ 24 декабря 2009

Загружаете ли вы подкласс UIImageView из файла пера? Если вы, -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;
}
1 голос
/ 25 декабря 2009

прорыв: одна проблема, которую я заметил, состояла в том, что в моем контроллере представления я использовал 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. Буду очень признателен за любую помощь в получении кнопки.

1 голос
/ 24 декабря 2009

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

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

добавьте это туда, где написано:

 UIButton *button = [UIButton buttonWithType: UIButtonTypeRoundedRect];

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

...