UIButton не реагирует на сенсорные события после изменения его положения с помощью setFrame - PullRequest
4 голосов
/ 29 марта 2011

У меня есть класс контроллера представления (дочерний), который расширяется от класса контроллера представления (родительский). В методе loadView () родительского класса я создаю подпредставление (с именем myButtonView) с двумя кнопками (кнопки расположены в подпредставлении горизонтально) и добавляю его в основной вид. В подклассе мне нужно сдвинуть эти две кнопки вверх на 50 пикселей.

Итак, я сдвигаю buttonView, вызывая метод setFrame. Это заставляет кнопки сдвигаться и отображаться правильно, но они не реагируют на сенсорные события после этого. Кнопки работают правильно в представлениях типа родительского класса. Также в представлении типа дочернего класса, если я закомментирую вызов setFrame (), кнопки будут работать правильно.

Как я могу сдвинуть кнопки и заставить их реагировать на сенсорные события?

Любая помощь приветствуется.

Ниже приведены фрагменты кода.

В родительском классе:

- (void)loadView {

// Some code...
    CGRect buttonFrameRect = CGRectMake(0,yOffset+1,screenRect.size.width,KButtonViewHeight);
    myButtonView = [[UIView alloc]initWithFrame:buttonFrameRect];
    myButtonView.backgroundColor = [UIColor clearColor];
    [self.view addSubview:myButtonView];

// some code... 
    CGRect nxtButtonRect = CGRectMake(screenRect.size.width - 110, 5, 100, 40);
    myNxtButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [myNxtButton setTitle:@"Submit" forState:UIControlStateNormal];
    myNxtButton.frame = nxtButtonRect;
    myNxtButton.backgroundColor = [UIColor clearColor];

    [myNxtButton addTarget:self action:@selector(nextButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [myButtonView addSubview:myNxtButton];

    CGRect backButtonRect = CGRectMake(10, 5, 100, 40);
    myBackButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [myBackButton setTitle:@"Back" forState:UIControlStateNormal];

    myBackButton.frame = backButtonRect;
    myBackButton.backgroundColor = [UIColor clearColor];
    [myBackButton addTarget:self action:@selector(backButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [myButtonView addSubview:myBackButton];
// Some code... 
}

В детском классе:

- (void)loadView {

    [super loadView];


//Some code ..

    CGRect buttonViewRect = myButtonView.frame;
    buttonViewRect.origin.y = yOffset; // This is basically original yOffset + 50
    [myButtonView setFrame:buttonViewRect];

    yOffset += KButtonViewHeight;

// Add some other view below myButtonView ..    
}

Ответы [ 4 ]

9 голосов
/ 29 марта 2011

Кнопка может перекрываться с другим видом после смены кадра ... Просто попробуйте установить цвет фона для прозрачных видов, чтобы вы могли получить четкое представление о том, какой вид перекрывается на кнопке.

7 голосов
/ 22 марта 2012

Убедитесь, что с контейнером вашего UIButton можно взаимодействовать. Это тот, который получает меня. Если ваша UIButton является подпредставлением другого представления (не основного представления вашего контроллера представления), возможно, оно не настроено на взаимодействие с пользователем (по умолчанию). Попробуйте: containerView.userInteractionEnabled = YES;

3 голосов
/ 29 марта 2011

Спасибо за помощь, ребята, вы были правы. Я забыл изменить размер scrollView, который я добавил над кнопками в родительском представлении. Таким образом, это перекрывалось со смещенной кнопкой ViewView. Изменение цвета фона помогло мне увидеть это. Спасибо за совет, Чандан.

2 голосов
/ 29 марта 2011

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

Удачи.

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