Почему мой UIButton не реагирует на прикосновения?

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

Я добавил UIButton (Rounded Rect) в подкласс UIView (DialogView), который является подвидом представления моего контроллера представления. Это подпредставление почти полностью создано в IB. Я подключил кнопку к (IBAction)okButtonPressed:(id)sender в IB для Touch Up Inside и создал соответствующий метод в DialogView. Однако, когда я «касаюсь» этой кнопки, она не запускает метод. userInteractionEnabled имеет значение true для представления VC, DialogView и UIButton.

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

- (id)initWithCoder:(NSCoder *)decoder {
    if (self = [super initWithCoder:decoder]) {
        NSLog(@"DialogView initWithCoder called");
    }
    return self;
}

В дальнейшем исследовании я подключил IBOutlet к кнопке, а затем, если я попытаюсь изменить titleLabel из контроллера представления, я замечу, что он сильно усечен. Текст по умолчанию «Нажми меня!», установленный в IB, отображается нормально при первом отображении вида. Но если я изменю текст...

self.DialogView.okButton.titleLabel.text = @"Not Working";

... он усекается до "N..."

Не знаю, связано ли это. Наверное...

Кто-нибудь видит, что я тут напортачил?

Изменить (добавление кода, связанного с отображением UIButton):

Из контроллера представления:

self.DialogView = [[[NSBundle mainBundle] loadNibNamed:@"DialogView" owner:self options:nil] objectAtIndex:0];; 
self.DialogView.myVC = self;
self.DialogView.backgroundColor = [UIColor clearColor];
self.DialogView.center = CGPointMake(self.view.frame.size.width / 2, self.view.frame.size.height / 2);
self.DialogView.nameLabel.text = loan.fullName;
self.DialogView.noteLabel.text = loan.summaryOfLoan;
self.DialogView.amountLabel.text = [currencyFormatter stringFromNumber:loan.originalAmount];
self.DialogView.alpha = 0.0;
[self.view addSubview:DialogView];

Все UILabels отображаются, как и ожидалось. Как и проблема UIButton. Я вижу это, я просто не могу с ним взаимодействовать!?!

Интерфейс DialogView:

@class MyViewController;

@interface DialogView : UIView {
    IBOutlet UILabel *nameLabel, *noteLabel, *amountLabel;
    IBOutlet UIImageView *arrowView;
    IBOutlet UIButton *okButton;
    MyViewController *myVC;
}

@property (nonatomic, retain) UILabel *nameLabel, *noteLabel, *amountLabel;
@property (nonatomic, retain) UIImageView *arrowView;
@property (nonatomic, assign) MyViewController *myVC;
@property (nonatomic, retain) UIButton *okButton;

- (IBAction)okButtonPressed:(id)sender;

@end

И реализация DialogView:

#import "DialogView.h"
#import "MyViewController.h"

@implementation DialogView

@synthesize nameLabel, noteLabel, amountLabel, arrowView, okButton;
@synthesize myVC;

- (void)dealloc {
    [nameLabel release];
    [noteLabel release];
    [amountLabel release];
    [arrowView release];
    [okButton release];
    [super dealloc];
}

- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        // Initialization code
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)decoder {
    if (self = [super initWithCoder:decoder]) {
        NSLog(@"DialogView initWithCoder called");
    }
    return self;
}

- (IBAction)okButtonPressed:(id)sender {
    NSLog(@"pressed DialogView OK button");
    [self.myVC.navigationController popViewControllerAnimated:YES];
}

- (void)drawRect:(CGRect)rect {
    // Drawing code
}


@end

person Meltemi    schedule 13.11.2009    source источник
comment
Является ли представление Dialog сохраненным свойством на MyViewController?   -  person Art Gillespie    schedule 14.11.2009
comment
Исправление, которое следует читать. Является ли DialogView сохраненной собственностью на MyViewController?   -  person Art Gillespie    schedule 14.11.2009
comment
О, и какие границы сообщает self.DialogView после того, как вы установили его свойство center?   -  person Art Gillespie    schedule 14.11.2009
comment
Чтобы изменить текст кнопки, вы всегда должны использовать сообщение setTitle:forState вместо .title =   -  person rein    schedule 14.11.2009


Ответы (3)


Я подумал, что мы должны использовать -setTitle:forState: чтобы установить заголовок кнопки?

Еще одна мысль, вы проверили, что рамка кнопки не CGRectZero? И кстати, все фреймы для просмотра в иерархии? И проверьте, что один супервизор в иерархии не отключен от взаимодействия с пользователем? И я думаю, что imageView не реагирует на прикосновения, у вас есть такой в ​​вашем коде?

person Unfalkster    schedule 14.11.2009
comment
эта вещь imageView сложна. Если вы добавите UIButton в качестве подпредставления UIImageView, ваша кнопка будет отключена независимо от того, сколько раз вы установили userInteractionEnabled. - person Chris Truman; 05.10.2012

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

Надеюсь это поможет.

person ED.    schedule 23.12.2009

У вас может быть две кнопки одна над другой? Измените окно проекта IB на подробный вид и посмотрите, есть ли в вашем представлении больше кнопок, чем вы ожидаете. Возможно, вы подключили кнопку, которая на самом деле не нажимается так, как вы ожидаете.

person Patrick Burleson    schedule 13.11.2009
comment
я в подробностях... и нет. только один UIButton. 3 UILabels... но они не имеют значения (и работают нормально). - person Meltemi; 13.11.2009
comment
Вы упоминаете, что почти полностью создан в IB. Можете ли вы уточнить это? Какой части нет в IB? - person Patrick Burleson; 13.11.2009