将所选按钮的标签替换为其余按钮

时间:2014-02-03 06:53:33

标签: ios tags uibutton frame

此处有n UIButtons,在选择特定UIButtons时,它会从SuperView中删除。其余按钮框架移动到此点。同样尝试用选定的按钮替换其他按钮的标签。这是我到目前为止所尝试的。

-(void)totesttheFunction
{
    for(int i=0; i<7; i++)
    {
        UIButton *testHere = (UIButton*)[self.view viewWithTag:i];
        if([testHere isSelected])
        {
            int backuptagFor = testHere.tag;
            CGFloat diff = 30.0;
            for(int j=i+1; j<7;j++)
            {
                UIButton *btnToReplace = (UIButton*)[self.view viewWithTag:j];
                 CGRect setRect = CGRectMake(btnToReplace.frame.origin.x-diff, btnToReplace.frame.origin.y, btnToReplace.frame.size.width, btnToReplace.frame.size.height);
                btnToReplace.tag = backuptagFor;
                [testHere removeFromSuperview];

            }
        }
    }
}

这里整数变量差异是两个相邻UIButtons之间的帧差异。

3 个答案:

答案 0 :(得分:2)

我不知道您使用此代码的目的是什么。

但是UICollectionView将是解决问题的更好方法。 在collectionview单元格中添加多个按钮。 然后集合视图本身将管理每个单元格的删除和索引。

答案 1 :(得分:0)

根据我的理解,解决方案如下所示。

添加要查看的按钮

for (int i=0; i<7; i++) {
        UIButton *btn = [[UIButton alloc]init];
        btn.tag=i;
        CGRect frame=CGRectMake(0, i*40, 90, 37);
        [btn addTarget:self action:@selector(btnDidPressed:) forControlEvents:UIControlEventTouchUpInside];
        [btn setFrame:frame];
        [btn setTitle:[NSString stringWithFormat:@"Button %d",i] forState:UIControlStateNormal];

        [self.view addSubview:btn];

    }

删除按下的按钮

-(IBAction)btnDidPressed:(id)sender
{
    UIButton *btn =(UIButton *)sender;

    [btn removeFromSuperview];

}

此外,您可以在视图子视图中重新排列按钮或在数组中存储按钮。按下按钮删除所选按钮并重绘剩余按钮。

答案 2 :(得分:0)

初始化存储按钮的数组。 [data addObject:btn]在viewdidload方法中。

然后您可以删除所选内容并替换下面的其他按钮。 btnDidPressed方法:

UIButton *btn =(UIButton *)sender; //Pressed button 

CGRect rect = btn.frame; //pressed button frame
CGRect temp ; 

int tag =btn.tag; //pressed button tag
[btn removeFromSuperview]; //remove from view
[arr removeObjectAtIndex:tag]; //remove from array

for (int i =0; i<arr.count; i++) {
    UIButton *btnNew = [arr objectAtIndex:i];
    NSLog(@"tags old %d new %d",tag,btnNew.tag);
    if (btnNew.tag>tag) { //be sure not to move previous buttons 
        temp = btnNew.frame;
        [btnNew setFrame:rect];
        btnNew.tag=i; //change tag
        rect = temp;
        [self.view addSubview:btnNew];
    }

}