UIButton没有设置文本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIButton没有设置文本相关的知识,希望对你有一定的参考价值。

我似乎在Objective C ios应用程序中遇到问题,我根据数组中的对象数量创建了多个按钮。我知道Swift流利,所以我将逻辑复制到Swift中,并且它有效。但是在Objective C中,我无法看到按钮的文本(删除for循环后)或创建多个按钮。例如,我有一个包含三个名字的数组。我想为每个名称创建一个按钮,标题设置为相应的名称。到目前为止,我有这个:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];


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

for (int i = 0; i > 10; i++) {
    [ages addObject:[NSString stringWithFormat:@"%i", i]];
}


UIScrollView  *scrollView= [[UIScrollView alloc]initWithFrame:self.view.frame];
scrollView.delegate= self;
self.automaticallyAdjustsScrollViewInsets= NO;
scrollView.backgroundColor= [UIColor clearColor];
scrollView.scrollEnabled= YES;
scrollView.userInteractionEnabled= YES;
[scrollView setShowsHorizontalScrollIndicator:NO];
[scrollView setShowsVerticalScrollIndicator:NO];


CGFloat xValue = 0;
for(int x=0; x > ages.count; x++){
    UIButton  *button= [[UIButton alloc] initWithFrame:CGRectMake(xValue ,0 , 172 ,65)];
    UIColor *buttonOutline = [[UIColor redColor] CGColor];
    button.layer.borderColor = [buttonOutline CGColor];
    button.layer.backgroundColor = [[UIColor clearColor] CGColor];
    button.layer.borderWidth = 1.0;
    button.layer.cornerRadius = 6.0;
    [button.titleLabel setFont:[UIFont fontWithName:@"Helvetica" size:13.0]];
    button.titleLabel.text = [ages objectAtIndex:x];
    [button addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];
    [scrollView addSubview:button];
    NSLog(@"Button Added");
    xValue = button.frame.size.width + 40;

}

scrollView.contentSize = CGSizeMake(xValue, 65);
[self.view addSubview:scrollView];

}

- (void)test:(UIButton*)sender{
    NSLog(@"Clicked %@", sender.titleLabel.text);
}



@end

如果有人发现此代码有任何问题,请指出!

谢谢,

阿纳夫·K

答案

我发现四个问题(可能还有其他问题)阻止了这个问题:

1)设置ages数组时的for循环绑定不正确。 2)创建按钮时的for循环绑定不正确。 3)您正在错误地设置buttonOutline颜色。 4)xValue正在更新错误。

这是更改后的viewDidLoad方法:

- (void)viewDidLoad {
  [super viewDidLoad];

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

    for (int i = 0; i < 10; i++) { // UPDATED
        [ages addObject:[NSString stringWithFormat:@"%i", i]];
    }


    UIScrollView  *scrollView= [[UIScrollView alloc]initWithFrame:self.view.frame];
    scrollView.delegate= self;
    self.automaticallyAdjustsScrollViewInsets= NO;
    scrollView.backgroundColor= [UIColor clearColor];
    scrollView.scrollEnabled= YES;
    scrollView.userInteractionEnabled= YES;
    [scrollView setShowsHorizontalScrollIndicator:NO];
    [scrollView setShowsVerticalScrollIndicator:NO];


    CGFloat xValue = 0;
    for(int x=0; x < ages.count; x++){ // UPDATED
        UIButton  *button= [[UIButton alloc] initWithFrame:CGRectMake(xValue ,0 , 172 ,65)];
        UIColor *buttonOutline = [UIColor redColor]; // UPDATED
        button.layer.borderColor = [buttonOutline CGColor];
        button.layer.backgroundColor = [[UIColor clearColor] CGColor];
        button.layer.borderWidth = 1.0;
        button.layer.cornerRadius = 6.0;
        [button.titleLabel setFont:[UIFont fontWithName:@"Helvetica" size:13.0]];
        button.titleLabel.text = [ages objectAtIndex:x];
        [button addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];
        [scrollView addSubview:button];
        NSLog(@"Button Added");
        xValue += button.frame.size.width + 40; // UPDATED

    }

    scrollView.contentSize = CGSizeMake(xValue, 65);
    [self.view addSubview:scrollView];
}

我用更新的注释标记了我更改的四行,因此您可以将它们与原始注释进行比较。

编辑要更改文本和文本颜色,请使用以下命令:

[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[button setTitle:[ages objectAtIndex:x] forState:UIControlStateNormal];

并删除此:

button.titleLabel.text = [ages objectAtIndex:x];

您需要这样做,因为您可以为按钮的不同状态设置不同的文本,这一切都将自动为您处理。

以上是关于UIButton没有设置文本的主要内容,如果未能解决你的问题,请参考以下文章

UIButton没有设置文本

如何制作UIButton的文本对齐中心?使用IB

如何动态设置uibutton的标签颜色和对齐方式

以编程方式设置 UIButton 文本颜色 [重复]

以编程方式更改UIButton的标题颜色,其标题设置为iOS 7中的属性

UIButton 中的标题标签文本颜色无法正确设置动画