0

我关注评论并尝试解决我的问题,但仍然无法正常工作。

当我在模拟器上运行测试演示时,我得到了这个:

运行演示项目视图

我点击了test2,我想在清除按钮标题之前更改按钮标题,但我

得到这个 :

在我点击 test2 按钮后

单击另一个按钮时,我无法清除按钮标题。

任何人都可以帮忙??

这是我的代码

-(void)addbutton
{
    for (int i=0; i<3; i++)
    {
        UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake((i*100), 0, 100, 100)];
        button.titleLabel.text = @"";
        [button setTag:i];
        [button setTitle:[self.demoDataArray objectAtIndex:i] forState:UIControlStateNormal];
        [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        button.backgroundColor = [UIColor clearColor];
        [button addTarget:self action:@selector(setButtonTitle:) forControlEvents:UIControlEventTouchUpInside];
        [self.demoView addSubview:button];
    }
}

-(IBAction)setButtonTitle:(id)sender
{
    if ([sender tag] == 0)
    {
        self.demoDataArray = [[NSArray alloc] initWithObjects:@"test5", @"test6", @"test7", @"test8", nil];
        [self addbutton];
    }
    else if([sender tag] == 1)
    {
        self.demoDataArray = [[NSArray alloc] initWithObjects:@"test9", @"test10", @"test11", @"test12", nil];
        [self addbutton];
    }
    else if([sender tag] == 3)
    {
        self.demoDataArray = [[NSArray alloc]initWithObjects:@"test13", @"test14", @"test15", @"test16", nil];
        [self addbutton];
    }
}
4

2 回答 2

1

试试这个

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

  [secondbtn setTitle:@"" forState:UIControlStateNormal];

   }
于 2012-09-04T09:26:50.807 回答
1

每次按下任何按钮时,您都会实例化新按钮并将它们添加到其他按钮之上。您可能只想更新现有按钮。试试这个-addButton代替你的方法:

-(void)addbutton
{
    for (int i=0;i<3;i++)
    {
        NSInteger tag = i+1;
        UIButton *button = (UIButton *)[self.view viewWithTag:tag];
        if (!button)
        {
            button = [[UIButton alloc] initWithFrame:CGRectMake((i*100), 0, 100, 100)];
            [button addTarget:self action:@selector(setButtonTitle:) forControlEvents:UIControlEventTouchUpInside];
            [button setTag:tag];
            [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            button.backgroundColor = [UIColor clearColor];
            [self.demoView addSubview:button];
        }

        button.titleLabel.text = @""; // Not actually sure you need this...
        NSString *titleText = nil;
        if (i < self.demoDataArray.count)
            titleText = [self.demoDataArray objectAtIndex:i];
        [button setTitle:titleText forState:UIControlStateNormal];

    }
}

现在按钮被实例化,给定一个目标和动作,标记,并仅当它不存在时才添加到按钮层次结构中。之后每次点击按钮时,只会更新标题。

另外,非常重要: : 为了-viewWithTag:工作,你必须为你的按钮使用一个不等于 0 的标签,默认标签 - 否则按钮的超级视图将被返回。这意味着您需要在按钮处理程序中进行以下更改,该处理程序已经存在检查标签的错误(检查 3 而不是 2)。增加标签以从 1 开始并以 3 结束,如下所示:

-(IBAction)setButtonTitle:(id)sender
{
    if ([sender tag] == 1)
    {
        self.demoDataArray = [[NSArray alloc] initWithObjects:@"test5",@"test6",@"test7",@"test8", nil];
        [self addbutton];
    }
    else if([sender tag] == 2)
    {
        self.demoDataArray = [[NSArray alloc] initWithObjects:@"test9",@"test10",@"test11",@"test12", nil];
        [self addbutton];
    }
    else if([sender tag] == 3)
    {
        self.demoDataArray = [[NSArray alloc]initWithObjects:@"test13",@"test14",@"test15",@"test16", nil];
        [self addbutton];
    }
}

该方法也可以使用一些清理来消除重复的代码,并且无论如何在这里使用switch语句可能更合适。但这既不是这里也不是那里。

好的,这可能会让您启动并运行。我没有测试或编译这个,所以如果你对编译器有一些你自己无法解决的问题,请告诉我,我会看看我是否能发现问题。

于 2012-09-05T03:16:14.467 回答