无法替换UIButton(s)的标签

时间:2014-02-04 05:06:29

标签: ios iphone objective-c uibutton

我已经说过例如7 UIButtons,即c1到c7。现在我已经为UIButtons c1到c7分别为1到7分配了标签。

现在,当我选择c2时,它会从superView中删除,所以现在c2的标记为2,转移到c3,3转移到c4,依此类推。

这是我尝试的但是逻辑不能正常工作。我之前发过类似问题的问题,但没有得到任何适当的回应。

-(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];

            }
        }
    }
}

3 个答案:

答案 0 :(得分:1)

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    for(int itemIndex = 1; itemIndex <= 7; itemIndex++)
    {
        UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(itemIndex*40, 10, 30, 30)];
        btn.tag = itemIndex;
        [self.view addSubview:btn];

        if (itemIndex == 3 ||itemIndex == 4)
        {
            [btn setSelected:YES];
        }
    }

    [self testFunction];
}


- (void)testFunction
{
    int totalButtons = 7;
    int totalRemovedButtons = 0;

    for(int itemIndex = 1; itemIndex <= totalButtons; itemIndex++)
    {
        UIButton *testHere = ([[self.view viewWithTag:itemIndex] isKindOfClass:[UIButton class]])?(UIButton *)[self.view viewWithTag:itemIndex]:nil;
        if([testHere isSelected])
        {
            [testHere removeFromSuperview];
            NSLog(@"removed button with tag:%d",itemIndex + totalRemovedButtons);

            for (int tempItemIndx = itemIndex + 1; tempItemIndx <= totalButtons; tempItemIndx++)
            {
                 UIButton *nextButton = ([[self.view viewWithTag:tempItemIndx] isKindOfClass:[UIButton class]])?(UIButton *)[self.view viewWithTag:tempItemIndx]:nil;
                nextButton.tag = tempItemIndx - 1;
            }

           itemIndex--;
           totalRemovedButtons ++;
        }

        NSLog(@"loop run %d",itemIndex);
    }

    NSLog(@"-------------------------------------------------------------------");

    //Checking the updated tags.

    for(int itemIndex = 1; itemIndex <= (totalButtons - totalRemovedButtons); itemIndex++)
    {
        UIButton *testHere = ([[self.view viewWithTag:itemIndex] isKindOfClass:[UIButton class]])?(UIButton *)[self.view viewWithTag:itemIndex]:nil;
        NSLog(@"New tags %d",testHere.tag);
    }
}

<强>输出:

 loop run 1
 loop run 2
 removed button with tag:3
 loop run 2
 removed button with tag:4
 loop run 2
 loop run 3
 loop run 4
 loop run 5
 loop run 6
 loop run 7
 ---------------------
 New tags 1
 New tags 2
 New tags 3
 New tags 4
 New tags 5

答案 1 :(得分:1)

首先应用以下方法删除旧用户界面从头开始重新生成新用户界面再次为其分配相同标签
例如123456 - 删除4 - 12356 - 存储剩余数据 - 从旧数据重新生成新UI 现在12345

- (IBAction)actionDeletePrevEmp:(UIButton *)sender
{

// ********* DELETED OLD UI AND GENERATED DATA FROM OLD UI **********

NSMutableArray *tempArray = [[NSMutableArray alloc]init];

for (int BTNCounter = 1; BTNCounter < 8 ;BTNCounter++)
{
    if (BTNCounter == sender.tag)
    { // do not add contents to array
      // delete it from UI

        [(UIButton *)[self.view viewWithTag:BTNCounter]removeFromSuperview];

        continue;
    }


}


// ************* GENERATING NEW UI WITH TEMP DATA **************


int empSizeCounter = 50;

for (int loopCounter = 0, BTNTagCounter = 1 ; BTNTagCounter < 7; loopCounter++)
{
    viewPreviousEmployerList = [[UIView alloc]initWithFrame:CGRectMake(0.0, empSizeCounter, 320.0, 50.0)];


    //  viewPreviousEmployerList.backgroundColor = [UIColor blackColor];

    deletePrevEmpButton = [UIButton buttonWithType:UIButtonTypeSystem];
    //[deletePrevEmpButton setImage:[UIImage imageNamed:@"checkbox.png"] forState:UIControlStateNormal];

    deletePrevEmpButton = [[UIButton alloc]initWithFrame:CGRectMake(264.0, 10.0, 30.0, 30.0)];
    deletePrevEmpButton.backgroundColor = [UIColor blueColor];
    deletePrevEmpButton.titleLabel.text = @"X";
    deletePrevEmpButton.tag = BTNTagCounter;


    if (loopCounter+1 > [tempArray count])
    {
         btnTemp.text = @"";

                }
    else
    {
        btnTemp.text = tempArray[loopCounter];


    }




    BTNTagCounter++;
    [viewPreviousEmployerList addSubview:btnTemp];

    [self.viewAddEmployer addSubview:viewPreviousEmployerList];

    empSizeCounter = empSizeCounter + 50;


}

答案 2 :(得分:0)

首先你需要在NSMutableArray中添加所有按钮并关注我,(此处数组名称为 _myArrayOfBtn
添加按钮的方法,例如(并确保每个按钮的方法名称相同)

[myBuutonName addTarget:self action:@selector(totesttheFunction:) forControlEvents:UIControlEventTouchUpInside];

方法声明就像,

-(void) totesttheFunction:(UIButton *)sender
{
    [sender removeFromSuperview]; // just put this code.
    [_myArrayOfBtn removeObjectAtIndex:sender.tag];
    // replace tag of buttons
    for(int i = 1; i < _myArrayOfBtn.count; i ++)
    {
      UIButton *btn = (UIButton *)[_myArrayOfBtn objectAtIndex:i]
      btn.tag = i;
    }

}