2

我尝试根据单击 3 个按钮之一来更改 3 个按钮的外观(TitleLable + 背景)和 TextView 的文本。(类似于选项卡式内容)

我在 xib 中创建了 4 个元素,并将它们与 .h 链接:

   IBOutlet UIButton *buttonTab1;
    IBOutlet UIButton *buttonTab2;
    IBOutlet UIButton *buttonTab3;

    IBOutlet UITextView *thisDescription;

    - (IBAction)showTab1:(id)sender;
    - (IBAction)showTab2:(id)sender;
    - (IBAction)showTab3:(id)sender;

@property (strong, nonatomic) IBOutlet UIButton *buttonTab1;
@property (strong, nonatomic) IBOutlet UIButton *buttonTab2;
@property (strong, nonatomic) IBOutlet UIButton *buttonTab3;

在 .mi 尝试更改 4 个元素(这里是按钮 1 的代码):

@synthesize buttonTab1, buttonTab2, buttonTab3;

- (IBAction)showTab1:(id)sender{
        thisDescription.text = [NSString stringWithFormat:@"INHALT TAB 1: %@",transferDescription];
        buttonTab1.imageView.image = [UIImage imageNamed:@"content_tab1_on.png"];
        buttonTab2.imageView.image = [UIImage imageNamed:@"content_tab2.png"];
        buttonTab3.imageView.image = [UIImage imageNamed:@"content_tab3.png"];
        buttonTab1.titleLabel.text = @"Tab1on";
        buttonTab2.titleLabel.text = @"Tab2";
        buttonTab3.titleLabel.text = @"Tab3";
    }

TextViewElement 的文本变化很好,但标题和背景与 xib 中的相同。

4

2 回答 2

1

要在按钮上设置背景图像和标题,您应该使用setTitle:forState:方法和setBackgroundImage:forState:方法。由于按钮可能有不同的标题或背景,具体取决于状态,直接设置图像或标签将不起作用。

这应该让您了解如何在您的代码中实现这一点:

[buttonTab1 setBackgroundImage:[UIImage imageNamed:@"content_tab1_on.png"] forState:UIControlStateNormal];
[buttonTab2 setBackgroundImage:[UIImage imageNamed:@"content_tab2.png"] forState:UIControlStateNormal];
[buttonTab3 setBackgroundImage:[UIImage imageNamed:@"content_tab3.png"] forState:UIControlStateNormal];
[buttonTab1 setTitle:@"Tab1on" forState:UIControlStateNormal];
[buttonTab2 setTitle:@"Tab2" forState:UIControlStateNormal];
[buttonTab3 setTitle:@"Tab3" forState:UIControlStateNormal];
于 2012-11-29T11:19:01.967 回答
0

关键是您不要更改代码中的背景图像。您所做的是设置 UIButton 对象的(前景)图像。您最终将得到 IB 中定义的背景图像、以编程方式设置的文本和以编程方式设置的图像。

原则上,这应该可以工作,你甚至不会注意到你的错误,但是在 UIButton 上你不能同时设置图像和文本。Button 具有其中任何一个但不能同时显示两者 - 或者至少它不能同时显示两者。

解决方法:设置背景图片而不是图片。

于 2012-11-29T11:47:09.247 回答