为什么我的UIButton没有响应接触?

时间:2009-11-13 19:31:53

标签: cocoa-touch uiview uiviewcontroller uibutton

我确信我忽略了显而易见的事情,因为我有无数的工作按钮......但是......无论出于什么原因,这个都没有合作......

我已经将UIButton(圆角矩形)添加到UIView子类(DialogView),它是我的视图控制器视图的子视图。此子视图几乎完全在IB中创建。我已将IB中的按钮连接到(IBAction)okButtonPressed:(id)sender Touch Up Inside ,并在DialogView中创建了相应的方法。但是,当我“触摸”此按钮时,它不会触发该方法。 VC的视图 userInteractionEnabled true 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 ......”

Dunno,如果这是相关的。大概...

有人看到我搞砸了什么吗?

修改(添加与显示UIButton相关的代码):

从View Controller:

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 个答案:

答案 0 :(得分:8)

我认为我们应该使用-setTitle:forState:来设置按钮的标题?

另一个想法是,你确定按钮的框架不是CGRectZero吗?顺便说一下,层次结构中视图的所有帧?并检查层次结构中的一个超级视图是否禁用了用户交互? 并且,我认为imageView不响应触摸,你的代码中是否有一个?

答案 1 :(得分:3)

我只是遇到了或多或少相同的问题,我发现我的包含视图没有“启用用户交互”。

希望这有帮助。

答案 2 :(得分:0)

你可能有两个按钮在一起吗?将IB项目窗口更改为详细视图,查看您的视图是否有比预期更多的按钮。也许你已经连接了一个按钮,而这个按钮并没有真正得到你期待的新闻。