UiTableViewHeader - 动态按钮事件处理程序

时间:2014-07-29 15:32:33

标签: ios objective-c uitableview

我需要在静态uitableview节标题中添加一个uiButton - 我尝试了以下内容 -

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    // you can get the title you statically defined in the storyboard
    NSString *sectionTitle = [self tableView:tableView titleForHeaderInSection:section];
    CGRect frame = tableView.bounds;
    // create and return a custom view
    #define LABEL_PADDING 10.0f
    HeaderLabelStyling *customLabel = [[HeaderLabelStyling alloc] initWithFrame:CGRectInset(frame, LABEL_PADDING, 0)] ;

    UIButton *addButton = [[UIButton alloc] initWithFrame:CGRectMake(frame.size.width-60, 10, 50, 30)];

    addButton.backgroundColor = [UIColor whiteColor];
    addButton.titleLabel.textColor = [UIColor colorWithRed:240/255.0f green:118/255.0f blue:34/255.0f alpha:1.0f];
    addButton.titleLabel.tintColor = [UIColor blackColor];


    UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 100, 30)];
    title.text = @"iawn";

    customLabel.text = sectionTitle;

    customLabel.backgroundColor= [UIColor colorWithRed:143.0f/255.0f green:137.0f/255.0f blue:135.0f/255.0f alpha:1.0f];
    customLabel.textColor = [UIColor colorWithRed:255/255.0f green:255/255.0f blue:255/255.0f alpha:1.0f];
    [customLabel addSubview:addButton];
    [addButton addSubview:title];
     [addButton addTarget:self action:@selector(receiverButtonClicked:)  forControlEvents:UIControlEventTouchDown];
return customLabel;
}

-(void)receiverButtonClicked:(id)sender{
    NSLog(@"button clicked");
}

上面添加了一个按钮 - 但是没有对点击事件作出反应 - 有人可以建议我如何让它工作吗?

1 个答案:

答案 0 :(得分:2)

UILabel默认不处理触摸。

添加以下代码行:

customLabel.userInteractionsEnabled = YES;

要仅显示第三部分的按钮,您应添加以下条件:

if(section == 2){...}

因此,您的-tableView:viewForHeaderInSection:应如下所示:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection (NSInteger)section {
    if(section != 2) return nil;
    // you can get the title you statically defined in the storyboard
    NSString *sectionTitle = [self tableView:tableView titleForHeaderInSection:section];
    CGRect frame = tableView.bounds;
    // create and return a custom view
    #define LABEL_PADDING 10.0f
    HeaderLabelStyling *customLabel = [[HeaderLabelStyling alloc] initWithFrame:CGRectInset(frame, LABEL_PADDING, 0)] ;

    UIButton *addButton = [[UIButton alloc] initWithFrame:CGRectMake(frame.size.width-60, 10, 50, 30)];

    addButton.backgroundColor = [UIColor whiteColor];
    addButton.titleLabel.textColor = [UIColor colorWithRed:240/255.0f green:118/255.0f blue:34/255.0f alpha:1.0f];
    addButton.titleLabel.tintColor = [UIColor blackColor];


    UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 100, 30)];
    title.text = @"iawn";

    customLabel.text = sectionTitle;

    customLabel.backgroundColor= [UIColor colorWithRed:143.0f/255.0f green:137.0f/255.0f blue:135.0f/255.0f alpha:1.0f];
    customLabel.userInteractionsEnabled = YES;
    customLabel.textColor = [UIColor colorWithRed:255/255.0f green:255/255.0f blue:255/255.0f alpha:1.0f];
    [customLabel addSubview:addButton];
    [addButton addSubview:title];
     [addButton addTarget:self action:@selector(receiverButtonClicked:)  forControlEvents:UIControlEventTouchDown];
return customLabel;
}