在UITableView中按顺序单击按钮操作

时间:2016-07-21 07:36:58

标签: ios objective-c uitableview uibutton

在UITableView中创建了4x4 metrics按钮。 我想按顺序选择按钮。

//按钮在单元格中为行索引

创建
for (int i = 0; i< [buttonArray count]; i++)
{
    int buttonSpace = 10 * i + 10;
    NSLog(@"ButtonPosition:%d",buttonSpace + (i * 50));
    cell.Button = [[CustomButton alloc] initWithFrame:CGRectMake(buttonSpace + (i * 50),35, 50, 50)];
    cell.Button.layer.cornerRadius = 25;
    [cell.Button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
    cell.Button.buttonIndex = i;

    [cell.ScrollView addSubview:cell.Button];
    cell.ScrollView.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.3];
}
    rowIndexValue = indexPath.row;

//视图控制器中的按钮操作。

-(void)buttonAction:(CustomButton *)sender
{
    if (rowIndexValue) {

        int counter = (int)[sender buttonIndex];
            if (counter == incrementValue)
            {
                sender.backgroundColor = [UIColor redColor];
                counter += 1;
                incrementValue = counter;
            }
            else{
                sender.selected = NO;
            }
        }
}

按顺序排列按钮动作的顺序,对于任何随机行。 用户选择第3行但第3行中的选择行从第1个按钮开始,然后是第2个按钮,然后是第3个按钮,最后是第4个按钮。

4x4 - &gt;每行UITableview 4按钮4行。单击按钮后,它将处于禁用模式

4 个答案:

答案 0 :(得分:0)

设置适当的值,以便您可以识别按钮列和行位置。 buttonIndex只是保存i值,所以你只能获得列位置。你可以设置button.tag = indexPath.row并在buttonAction方法中使用它来知道行位置。

答案 1 :(得分:0)

在viewController中全局声明NSInteger tagValue。

-(NSUInteger)getRowByBtn:(UIButton *)btn :(UITableView *)tblView
{
    CGPoint center= btn.center;
    CGPoint rootViewPoint = [btn.superview convertPoint:center toView:tblView];
    NSIndexPath *indexPath = [tblView indexPathForRowAtPoint:rootViewPoint];
    NSLog(@"indexPath = %ld", (long)indexPath.row);
    return indexPath.row;
}

在上述方法的帮助下,您可以获得indexpath.row值,您可以从中确定tableview中每行的按钮。

[cell.Button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];

-(void)buttonAction:(UIButton*)sender
{     
    UIButton *btn=(UIButton *)sender;
    tagValue = [self getRowByBtn:btn :yourTableview];
    [[self.view viewWithTag:tagValue]setUserInteractionEnabled:YES];
    //or any other action
}

答案 2 :(得分:0)

CellForRowAtIndexPath中设置UIButton标记 像这样:

 [cell.btn_name addTarget:self action:@selector(onclick_button:) forControlEvents:UIControlEventTouchUpInside];
 self.btn_name.tag=indexpath.row;

并且

-(IBAction)onclick_button:(id)sender
{
    int btn_index= ((UIView*)sender).tag;
    NSLog(@"Btn index:%d",btn_index);
}

答案 3 :(得分:0)

使用以下代码解决问题。

-(void)buttonAction:(UIButton*)sender{
    CGPoint center = sender.center;
        CGPoint rootViewPoint = [sender.superview convertPoint:centre toView:self.tableView];
        NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:rootViewPoint];
        sender.userInteractionEnabled = NO;
        sender.backgroundColor = [UIColor redColor];
        CustomButton *enableNextButton = (CustomButton *) [[self.goalsTableView cellForRowAtIndexPath:indexPath] viewWithTag:sender.tag+1];
        enableNextButton.userInteractionEnabled = YES;
    }