无法在UI按钮中添加单击事件

时间:2012-01-23 07:39:51

标签: iphone objective-c uitableview uibutton

我正在创建包含两个标签和一个按钮的自定义视图。我无法点击按钮。我也发送了下面的代码。

.h文件

#import <UIKit/UIKit.h>


@interface customDeleteButton : UITableViewCell {

    IBOutlet UILabel *lbl;
    IBOutlet UILabel *lbl1;
 }
 @property(nonatomic,retain)IBOutlet UILabel *lbl;
 @property(nonatomic,retain)IBOutlet UILabel *lbl1;
 -(IBAction)btnClick:(id)sender;
 @end

.m文件

#import "customDeleteButton.h"


@implementation customDeleteButton
@synthesize lbl,lbl1;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {

self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    // Initialization code.
    lbl = [[UILabel alloc] initWithFrame:CGRectMake(50, 10, 200, 20)];
    lbl1 = [[UILabel alloc] initWithFrame:CGRectMake(260, 10, 200, 20)];
    [self addSubview:lbl];
    [self addSubview:lbl1];

}
return self;
}

- (void)willTransitionToState:(UITableViewCellStateMask)state{

[super willTransitionToState:state];


if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableViewCellStateShowingDeleteConfirmationMask) {


for (UIView *subview in self.subviews) {

    if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) {             

        UIButton *btn;


        btn=[[UIButton alloc]initWithFrame:CGRectMake(0, 0, 64, 33)];
        [btn addTarget:subview action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
        [btn setImage:[UIImage imageNamed:@"delete.png"] forState:UIControlStateNormal];
        btn.userInteractionEnabled=YES;
        btn.frame=CGRectMake(0,0,64,33);
        //UIImageView *deleteBtn = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 64, 33)];
        //[deleteBtn setImage:[UIImage imageNamed:@"delete.png"]];
        [[subview.subviews objectAtIndex:0] addSubview:btn];
        //[deleteBtn release];

    }       

}
  } 

}
 -(void)btnClick:(id)sender
{
    NSLog(@"HTllo");
}


- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

     [super setSelected:selected animated:animated];

// Configure the view for the selected state.
 }


- (void)dealloc {
    [super dealloc];
}

4 个答案:

答案 0 :(得分:2)

创建目标时,您需要将目标设置为主视图而不是子视图:

[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];

而且 - 你知道你在代码中做了什么吗?

在函数willTransitionToState中,您是否将UIButtons添加到按钮本身的子视图中? 这真的是你想要做的吗?函数willTransitionToState是否被调用?

答案 1 :(得分:1)

初始化时请尝试设置UIButton类型,并将目标更改为self。

        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        btn.frame = CGRectMake(0, 0, 64, 33);
        [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
        [btn setImage:[UIImage imageNamed:@"delete.png"] forState:UIControlStateNormal];
        btn.userInteractionEnabled=YES;
        [[subview.subviews objectAtIndex:0] addSubview:btn];

答案 2 :(得分:0)

将目标更改为self而不是subview。

UIButton *btn;


    btn=[[UIButton alloc]initWithFrame:CGRectMake(0, 0, 64, 33)];
    [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
    [btn setImage:[UIImage imageNamed:@"delete.png"] forState:UIControlStateNormal];
    btn.userInteractionEnabled=YES;
    btn.frame=CGRectMake(0,0,64,33);
    //UIImageView *deleteBtn = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 64, 33)];
    //[deleteBtn setImage:[UIImage imageNamed:@"delete.png"]];
    [[subview.subviews objectAtIndex:0] addSubview:btn];
    //[deleteBtn release];

答案 3 :(得分:-1)

newString = [oldString stringByReplacingOccurrencesOfString:@"-"withString:@" ' "];