В вашем методе воспроизведения, отключите кнопку первым делом. Когда вы инициализируете свой класс, установите его в качестве делегата для AVAudioPlayer и реализуйте протокол AVAudioPlayerDelegate , в частности, вы хотите перехватить audioPlayerDidFinishPlaying: успешно: событие. В этом случае снова включите кнопку.
Таким образом, это отключит кнопку, воспроизведет звук, а когда воспроизведение закончится, включите кнопку.
Теперь для нескольких кнопок просто сделайте одно и то же для каждой кнопки. Уловка в том, что вам нужно отслеживать AVAudioPlayer для каждой кнопки и знать, какой игрок идет с какой кнопкой. NSDictionary можно использовать для хранения списка игроков, а также значений ключей.
РЕДАКТИРОВАТЬ: чтобы остановить предыдущее воспроизведение и начать все сначала ...
Объявите AVPlayer на уровне класса, а не создавайте новый для каждого нажатия кнопки. Когда кнопка нажата, вы можете отправить ей сообщение seekToTime, чтобы начать сначала. Для нескольких кнопок есть несколько классов уровня AVPlayers.
Редактировать: если вы используете класс AVAudioPlayer, вы можете сделать то же самое, установив свойство currentTime.