2012-02-05 53 views
-5

基本上我想创建48个按钮插座。我在界面生成器中创建了按钮,我希望能够将它们连接到插座。IBOutlet阵列声明

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

我想水木清华这样的:

//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]); 
     } 
    } 
} 

我需要能够很容易地改变播放 文件谢谢

+0

这可能会帮助你 - https://stackoverflow.com/questions/46731185/how-to-connect-3-uibutton-to-one-outlet所有的 – Krunal 2017-10-13 14:06:24

回答

0

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

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

如果你想坚持,这里有一些提示: 假设你将按钮手动放置在XIB视图上。 分配型动物标签(例如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]; 
} 

创建自己的属性。音频(@属性在你的.h和@synthesize在你的.m)。 将您的48个声音重命名为1000.mp3到1048.mp3,并将它们添加到您的项目中。 添加框架AVFoundation.framework(target-> build phase->将链接库与库管理程序 - > +链接)。

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

好运

+0

首先谢谢您的宽容/了解。我现在无法访问我的mac,因此我无法完全复制代码,这就是我使用伪代码的原因。我有很多东西,发现了很多有用的信息,但我不知道如何把它们放在一起。从我的理解我应该做一个IBOutlet集合。我有一个文件名数组,一个播放声音文件的函数(以输入名称为例),我想将该函数分配给每个按钮,但每个按钮都应该播放不同的文件。我需要在循环中分配动作,因为我有很多按钮。 – 2012-02-05 21:07:06

+0

在我看来,你并不需要IBOutletCollection。如果你使用一个文件名数组。我想第一个按钮会播放你阵列的第一个项目。所以你需要一个间接的。您可以概括:“第一个按钮(带有标记1000)将播放数组的第一个文件名(索引0)”。您可以推导出按钮的索引(int index = sender.tag-1000)并获取文件名(NSString * fileToPlay = [myArray objectAtIndex:(index))。对不起,我不能在评论中放置源代码。 – 2012-02-05 21:22:58

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个按钮播放叠叠流叮当。

说真的,你应该阅读一些基本的文档。从About Creating Your First iOS App开始。苹果有很好的文档,并有数百个初学者教程。