iPhone UIButton addTarget: действие: forControlEvents: не работает - PullRequest
0 голосов
/ 13 марта 2010

Я вижу, что здесь есть похожие проблемы, но ни одно из решений не работает для меня. Здесь идет:

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

UIWindow 
--> UIView (searchView)
  --> UISearchBar (findField)
  --> UIView (prevButtonView)
    --> UIButton (prevButton)
  --> UIView (nextButtonView)
    --> UIButton (nextButton)

Пока все хорошо: все выложено так, как я хочу. Тем не менее, кнопки не принимают пользовательский ввод любого вида. Я использую метод UIButton addTarget: action: forControlEvents: и чтобы дать вам представление о том, что я делаю, вот мой код для nextButton:

nextButton = [UIButton buttonWithType:UIButtonTypeCustom];
[nextButton setImage:[UIImage imageNamed:@"find_next_on.png"] forState:UIControlStateNormal];
[nextButton setImage:[UIImage imageNamed:@"find_next_off.png"] forState:UIControlStateDisabled];
[nextButton setImage:[UIImage imageNamed:@"find_next_off.png"] forState:UIControlStateHighlighted];
[nextButton addTarget:self action:@selector(nextResult:) forControlEvents:UIControlEventTouchUpInside];

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

В целях информационной перегрузки я нашел немного кода, который распечатал бы всю мою информацию о просмотре. Вот что я получаю для всей моей иерархии представлений:

UIWindow
{{0, 0}, {320, 480}}
UILayoutContainerView
{{0, 0}, {320, 480}}
    UINavigationTransitionView
    {{0, 0}, {320, 480}}
        UIViewControllerWrapperView
        {{0, 64}, {320, 416}}
            UIView
            {{0, 0}, {320, 416}}
                UIWebView
                {{0, 44}, {320, 416}}
                    UIScroller
                    {{0, 0}, {320, 416}}
                        UIImageView
                        {{0, 0}, {54, 54}}
                        UIImageView
                        {{0, 0}, {54, 54}}
                        UIImageView
                        {{0, 0}, {54, 54}}
                        UIImageView
                        {{0, 0}, {54, 54}}
                        UIImageView
                        {{-14.5, 14.5}, {30, 1}}
                        UIImageView
                        {{-14.5, 14.5}, {30, 1}}
                        UIImageView
                        {{0, 0}, {1, 30}}
                        UIImageView
                        {{0, 0}, {1, 30}}
                        UIImageView
                        {{0, 430}, {320, 30}}
                        UIImageView
                        {{0, 0}, {320, 30}}
                        UIWebDocumentView
                        {{0, 0}, {320, 21291}}
                UIView
                {{0, 0}, {320, 44}}
                    UISearchBar
                    {{10, 8}, {240, 30}}
                        UISearchBarBackground
                        {{0, 0}, {240, 30}}
                        UISearchBarTextField
                        {{5, -2}, {230, 31}}
                            UITextFieldBorderView
                            {{0, 0}, {230, 31}}
                            UIPushButton
                            {{205, 6}, {19, 19}}
                            UIImageView
                            {{10, 8}, {15, 15}}
                            UILabel
                            {{30, 7}, {163, 18}}
                    UIView
                    {{290, 15}, {23, 23}}
                        UIButton
                        {{0, 0}, {0, 0}}
                            UIImageView
                            {{-12, -12}, {23, 23}}
                    UIView
                    {{260, 15}, {23, 23}}
                        UIButton
                        {{0, 0}, {0, 0}}
                            UIImageView
                            {{-12, -12}, {23, 23}}
    UINavigationBar
    {{0, 20}, {320, 44}}
        UINavigationButton
        {{267, 7}, {48, 30}}
            UIImageView
            {{0, 0}, {48, 30}}
            UIButtonLabel
            {{11, 7}, {26, 15}}
        UINavigationItemView
        {{79, 8}, {180, 27}}
        UINavigationItemButtonView
        {{5, 7}, {66, 30}}
MBProgressHUD
{{0, 0}, {320, 480}}
    UIActivityIndicatorView
    {{141, 206}, {37, 37}}
    UILabel
    {{117, 247}, {86, 27}}

Соответствующая часть отмечена над разделом UINavigationBar.

У кого-нибудь есть предложения? У меня все вышло.

Спасибо за чтение.

Аарон.

1 Ответ

2 голосов
/ 14 марта 2010

Я понял это, так что сделка ради потомков.

Изначально я размещал свои кнопки, вкладывая их в UIViews и устанавливая их свойства кадра. Я смог упростить это, воспользовавшись преимуществом происхождения UIButton для UIView, чтобы сделать то же самое. Поэтому я забрал вид вложенности и объявил позицию UIButton следующим образом:

nextButton.frame = CGRectMake(searchView.frame.size.width - 30, 15, 23, 23);

Но это не решило мою проблему; это только сделало мой код меньше. Оказывается, это проблема вычисления свойства X моего фрейма. Когда я рефакторинг так:

NSInteger nextX = searchView.frame.size.width - 30;
nextButton.frame = CGRectMake(nextX, 15, 23, 23); 

Все снова заработало. Пойди разберись.

Ура! Аарон.

...