2012-02-05 82 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開始。蘋果有很好的文檔,並有數百個初學者教程。