Почему мой UIButton не реагирует на прикосновения? - PullRequest
4 голосов
/ 13 ноября 2009

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

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

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

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

В дальнейшем исследовании я подключил IBOutlet к кнопке, а затем, если я пытаюсь изменить titleLabel с контроллера представления, я замечаю, что он сильно обрезается. Текст по умолчанию « Press Me! », установленный в 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

Ответы [ 3 ]

8 голосов
/ 14 ноября 2009

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

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

3 голосов
/ 23 декабря 2009

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

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

0 голосов
/ 13 ноября 2009

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

...