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 以外のタグをボタンに使用する必要があります。そうしないと、ボタンのスーパービューが返されます。これは、ボタン ハンドラーで次の変更を行う必要があることを意味します。これには、既にタグのチェックに関するバグがありました (2 ではなく 3 に対してチェック)。次のように、タグを 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ここでステートメントを使用する方が適切です。しかし、それはここでもそこでもありません。

OK、これでおそらく起動して実行できるはずです。私はこれをテストしたりコンパイルしたりしませんでしたので、コンパイラに問題があり、自分で解決できない場合はお知らせください。問題を特定できるかどうかを確認します.

于 2012-09-05T03:16:14.467 に答える