iOS - динамические кнопки - PullRequest
       6

iOS - динамические кнопки

6 голосов
/ 16 февраля 2011

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

UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button1.frame = CGRectMake(475, 302, 49, 58);
    [button1 setTitle:@"1" 
             forState:(UIControlState)UIControlStateNormal];
    [button1 addTarget:self
                action:@selector(goToFirstTrailer) 
      forControlEvents:(UIControlEvents)UIControlEventTouchDown];
    [myImageView addSubview:button1];


-(void)goToFirstTrailer {
    [self startAnimator:@"OutsideToTrailer1_" forNumFrames:60];
}

В представлении imageView, на котором это размещено, есть кнопки и взаимодействие с пользователем включено.

Любой свет, который вы можете пролить, будет очень признателен.

Ответы [ 3 ]

10 голосов
/ 16 февраля 2011

Я думаю, что вы неправильно указали метод действия, измените эту строку на

-(void) goToFirstTrailer:(id)sender {

и где вы устанавливаете действие на

[button1 addTarget:self action:@selector(goToFirstTrailer:) forControlEvents:....

Важным является двоеточие после имени сообщения, поскольку я изменил подпись метода действия, чтобы включить отправителя.

Редактировать Я написал небольшой пример проекта только с imageView в MainWindow.xib и программно создал кнопку следующим образом

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.

    UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button1.frame = CGRectMake(0.f, 0.f, 50.f, 50.f);
    [button1 setTitle:@"1" 
             forState:(UIControlState)UIControlStateNormal];
    [button1 addTarget:self
                action:@selector(goToFirstTrailer:) 
      forControlEvents:(UIControlEvents)UIControlEventTouchDown];
    imageView.userInteractionEnabled = YES; // <--- this has to be set to YES
    [imageView addSubview:button1];
    [self.window makeKeyAndVisible];

    return YES;
}

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

Вот метод действия

- (void) goToFirstTrailer:(id)sender {
    imageView.backgroundColor = [UIColor redColor];
}

Установка свойства userInteractionEnabled в родительском imageView имеет значение. Если для него установлено значение NO, которое является значением по умолчанию, никакие события не направляются на кнопку.

0 голосов
/ 14 июля 2012

Это прекрасно работает для меня. Обратите внимание, что я изменил событие на UIControlEventTouchUpInside, чтобы сначала было видно состояние нажатия кнопки.

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn.frame = CGRectMake(20,400,88,35); //The position and size of the button (x,y,width,height)
[btn setTitle:@"Quit" forState:UIControlStateNormal];
[btn addTarget:self
            action:@selector(showAbout) 
  forControlEvents:(UIControlEvents)UIControlEventTouchUpInside];
[self.view addSubview:btn];
0 голосов
/ 24 января 2012

Если myImageView является объектом UIImageView, при добавлении к нему подпредставления (например, UIButton) отображается только изображение, которым представлен объект. Если вы добавите этот UIButton как подпредставление UIView, он должен работать отлично. Попробуйте добавить вспомогательный UIView в ваш UIImageView, а затем добавьте свою кнопку в подпредставление нового вспомогательного UIView, которое должно решить вашу проблему.

...