通过遍历数组创建按钮

Posted

技术标签:

【中文标题】通过遍历数组创建按钮【英文标题】:Creating Buttons by looping through an array 【发布时间】:2013-04-21 23:30:56 【问题描述】:

所以我之前问过这个问题,得到了一些回应,但事情变得非常混乱,所以我决定在这里重新问。

我在这里初始化一个滚动视图:

ScrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0,0,320,480)];
ScrollView.showsVerticalScrollIndicator=YES;
ScrollView.scrollEnabled=YES;
ScrollView.bounces = YES;
ScrollView.userInteractionEnabled=YES;
[self.view addSubview:ScrollView];
ScrollView.contentSize = CGSizeMake(10500,480);
[self.view addSubview:homeButton];

我有要创建的 44 个按钮的数组,这些数组包含有关名称、图片的文件名、坐标等的信息。

我正在运行这个:

for (int i = 0; i < 44; i++) 
    [self makeLabelsAndButtons:i];
    xPresCoord += 10;

在我看来DidLoad

这是makeLabelsAndButtons的方法:

-(void)makeLabelsAndButtons:(NSInteger)indexPath

Button = [UIButton buttonWithType:UIButtonTypeCustom];
[Button addTarget:self action:@selector(presPressed:) forControlEvents:UIControlEventTouchUpInside];
Button.frame = CGRectMake(160.0, 240.0, 220.0, [[numbers objectAtIndex:indexPath] integerValue]);
Button.center = CGPointMake(xPresCoord, 200.0);
[Button setBackgroundImage:[UIImage imageNamed:[picArray objectAtIndex:indexPath]] forState: UIControlStateNormal];
[self.ScrollView addSubview:Button];

Label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 32)];
Label.text = [nameArray objectAtIndex:indexPath];
Label.center = CGPointMake([[numbers objectAtIndex:indexPath] integerValue], 390);
[Label setFont:[UIFont fontWithName:@"GurmukhiMN" size:27]];
Label.numberOfLines = 1;
Label.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5f];
[Label sizeToFit];
Label.textColor= [UIColor whiteColor];
[ScrollView addSubview:Label];
//[ScrollView insertSubview:Label atIndex:1];

//NSLog(@"name: %@, pic:%@, picY:%i", nameString, picString, picNumb);
for (UIView *subview in ScrollView.subviews) NSLog(@"View: %@", subview);


最后一个 NSLOG 显示没有添加子视图(标签和按钮),但我不知道为什么。

Button和Label定义为:

UIButton *Button;
UILabel *Label;

在我的 .h 文件中

感谢任何帮助!

编辑:这是另一个问题的链接

Creating buttons with an Array

【问题讨论】:

前几天我试过你的代码,它对我来说没问题。 ScrollView 是非零吗?你如何声明按钮?它们都是属性还是 ivars? ScrollView 不为零,ScrollView 既是我在标题中声明的属性又是 UIScrollView,我知道它有效,因为我在界面生成器中有一些项目,它们在那里所以我知道视图存在。 Button 定义为 UIButton *Button;在我的标题中 我可以查看您使用的代码的 .h 和 .m 文件吗?看看有什么不同? @rdelmar 我更新了这个问题,我取出了 insertSubView,因为我不小心仍然把它放在标签上,但是是的,这个让我很难过。问题是,我添加了一些标签只是为了检查不使用数组,就在我的 viewDidLoad 中,它们显示得很好。当我使用数组并循环创建它们时,似乎出现了问题 【参考方案1】:

这是我的代码,

#import "ViewController.h"

@interface ViewController ()
@property (strong,nonatomic) UIScrollView *scrollView;
@property (strong,nonatomic) NSArray *nameArray;
@property (strong,nonatomic) NSArray *numbers;
@property (strong,nonatomic) NSArray *picXCoords;
@property (strong,nonatomic) NSArray *picArray;
@end

@implementation ViewController

- (void)viewDidLoad 
    [super viewDidLoad];
    self.nameArray = @[@"First",@"Second",@"Third"];
    self.numbers = @[@30,@50,@70];
    self.picXCoords = @[@160,@400,@700];
    self.picArray = @[@"back1.tiff", @"back2.tiff",@"Baldacci.tiff"];
    self.scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0,0,320,480)];
    self.scrollView.showsVerticalScrollIndicator=YES;
    self.scrollView.scrollEnabled=YES;
    self.scrollView.bounces = YES;
    self.scrollView.userInteractionEnabled=YES;
    [self.view addSubview:self.scrollView];
    self.scrollView.contentSize = CGSizeMake(20000,480);

    for (int i = 0; i < 3; i++) 
        [self makeLabelsAndButtons:i];
    


-(void)makeLabelsAndButtons:(NSInteger)indexPath
    NSString *nameString = [self.nameArray objectAtIndex:indexPath];
    NSString *picString = [self.picArray objectAtIndex:indexPath];
    NSInteger picNumb = [[self.numbers objectAtIndex:indexPath] integerValue];
    NSInteger picXnum = [[self.picXCoords objectAtIndex:indexPath] integerValue];

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button addTarget:self action:@selector(presPressed:) forControlEvents:UIControlEventTouchUpInside];
    button.frame = CGRectMake(160.0, 240.0, 220.0, picNumb);
    button.center = CGPointMake(picXnum, 200.0);
    [button setBackgroundImage:[UIImage imageNamed:picString] forState: UIControlStateNormal];
    [button setTitle:self.nameArray[indexPath] forState:UIControlStateNormal];
    [self.scrollView addSubview:button];
    NSLog(@"name: %@, picY:%i", nameString, picNumb);


【讨论】:

好的,当我把它放到一个新项目中时它可以工作,但我不明白为什么它不能在我现有的项目中工作 @tyler53,我也无法解释。如果你想让我看看你的项目,你可以发给我。 我真的很感激,如果你有时间我不想给你带来不便 通过 rdelmar@comcast.net 发送给我 让我们continue this discussion in chat

以上是关于通过遍历数组创建按钮的主要内容,如果未能解决你的问题,请参考以下文章

在反应jsx中一次遍历一个数组

如何使用 ngFor 遍历数组的一部分?

在 Velocity 模板语言中创建和遍历数组

如何用php创建一个无限遍历数组,并打印

遍历字典数组以查找值

怎么遍历只有id和pid 的数组排序