UITableView Sectionheaders每个都有一个按钮,但只有第一个Button发送动作

时间:2011-03-18 10:11:26

标签: iphone objective-c uitableview

我在我的Sectionheaders中添加了一个按钮,但只有第一个Button工作 其他按钮既不显示触摸动画也不发送动作。

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
//Headerview
UIView *myView = [[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 300.0, 20.0)] autorelease];
//HeaderLabel
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20.0, 5.0, 300.0, 30.0)] ;
label.textColor = [UIColor colorWithRed:0.286 green:0.341 blue:0.424 alpha:1.];
label.shadowColor = [UIColor whiteColor];
label.shadowOffset = CGSizeMake(0, 1);
label.font = [UIFont boldSystemFontOfSize:18];
label.backgroundColor = [UIColor clearColor];

//AddParameterButton
UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
[button setFrame:CGRectMake(275.0, 5.0, 30.0, 30.0)];
button.tag = section;
button.hidden = NO;
[button setBackgroundColor:[UIColor clearColor]];
[button addTarget:self action:@selector(insertParameter:) forControlEvents:UIControlEventTouchDown];

label.text = @"Parameter";
[myView addSubview:label];
[myView addSubview:button];
[myView bringSubviewToFront:button];
[label release];
return myView;
}

任何解决方案? 谢谢你 的 //编辑:
我调试了一下,viewForHeaderInSection:被调用了六次,但只有两个部分。希望我能帮助你 的 // EDIT2
试图将按钮添加为属性并以非动态方式执行,但也没有帮助

3 个答案:

答案 0 :(得分:2)

@Seega:

尝试为每个按钮按钮设置唯一标识符。

基本上我说的是按钮标签,然后尝试通过insertParameter:方法中的标签访问按钮,我认为这可以解决您的问题。

由于每个部分只有一个按钮,我觉得您最好选择将标记设置为indexPath.section

您可以使用- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section方法添加标记,如下所示

[button setTag:section];

OR

button.tag = section;

因此,请尝试使用按钮标记来唯一标识每个部分上的按钮。

希望这有助于你

答案 1 :(得分:1)

您应该为每个部分创建按钮。使用if条件并将代码放在每个块中。

if (section == 0) 
{

//code to create your button

}
else if(section == 1) 
{

//code to create your button

}

else
{

//code to create your button

}

试试这个。

答案 2 :(得分:0)

在我的身高ForHeaderInsection

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
if (section < 2)
    return 40;
return 10;
}

改变它并且工作正常 所以非常感谢你,我想我是一个小代码盲人 对不起,谢谢你