IBOutlet数组声明

时间:2012-02-05 20:19:20

标签: objective-c iboutlet

基本上我想创建48个按钮插座。我在界面构建器中创建了按钮,我希望能够将它们连接到插座。

当我按下其中一个按钮时,我需要能够播放声音。但播放的声音文件应该是可自定义的。

我想要像:

//first create the outlets
for(int i=1;i<49;i++){
    IBOutlet UIButton [Nstring of type (@"but%d"), i];
    [add butt"i" to array];
}

//然后将插座连接到按钮

//listen for buttons pressed
while(1){ //or the listener equivalent don't know exactly how i works
    for(int i=1;i<49;i++){
        if(array[i].pressed==TRUE){
              //if button is pressed play the according file
              playsound(sounds[i]);
        }
    }
}

我需要能够轻松更改播放的文件 谢谢

2 个答案:

答案 0 :(得分:0)

  

我想要像:

不。你很可能想要这样的东西:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSInteger i = 0;
    for (NSInteger y = 0; y < 7; y++) {
        for (NSInteger x = 0; x < 7; x++) {
            i++;
            CGRect frame = CGRectMake(5 + x * 45, 5 + y * 65, 40, 60);
            UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            button.frame = frame;
            button.tag = i;
            [button setTitle:[NSString stringWithFormat:@"%d", i] forState:UIControlStateNormal];
            [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
            [self.view addSubview:button];
        }
    }
}

- (IBAction)buttonClicked:(UIButton *)sender {
    NSLog(@"Imagine the music button number %d will play soon", sender.tag);
}

我知道,这是一个额外的按钮。让第49个按钮播放stackoverflow jingle。

说真的,你应该阅读一些基本的文档。从About Creating Your First iOS App开始。 Apple拥有优秀的文档,并且有数百个初学者教程。

答案 1 :(得分:0)

您可能需要更多练习Xcode / Objective-C基础知识和习语。 您的方法无效(例如,在iOS上,我们不循环(而(1))来监听事件。

找一些书,你很快就能制作出自己的音板。

如果你想坚持下去,这里有一些提示: 假设您手动将按钮放在XIB视图上。 将differents标记(例如从1000到1048)分配给每个按钮,并使用操作绑定它们:

// In your .h file
- (IBAction)didTouchButton:(UIButton * )sender;

然后你需要实现这个动作:

// In you .m file
- (IBAction)didTouchButton:(UIButton * )sender {
NSString * fileName = [NSString stringWithFormat:@"%d", sender.tag];
NSURL *url = [[NSBundle mainBundle] URLForResource:fileName withExtension: @"mp3"];
if (!url){NSLog(@"file not found"); return;}
NSError *error;
self.audio = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error] ;
[audio play];
}

为self.audio创建一个属性(.h中的@property和.m中的@synthesize)。 将名称从1000.mp3到1048.mp3的48个声音重命名,并将它们添加到项目中。 添加框架AVFoundation.framework(target-&gt; build phase-&gt; Link binaries with librairies-&gt; +)。

当您点击带有标签N的按钮时,它将播放名为N.mp3的声音。

祝你好运