我找到的其他问题没有帮助我解决问题,但我担心这可能是由于我自己的无能。
我创建了一个表...此表显示了用户的音轨选项列表。我的应用程序背后的想法是用户从列表中选择他们想要的曲目,然后接收复选标记。用户然后按下“播放”按钮,这些曲目将被流式传输/分层,并以“音景”的形式播放。
我现在有两个问题。
第1名:
当表格中的第一个选项被勾选时...
所以列表中的第9个选项也是如此......
选择第二个选项时...
第10个选项也被选中等......
这并不理想,因为它正在选择用户不想要的选项。我看过类似的帖子,但是我根据这些帖子尝试解决这个问题并没有奏效。
第2期:
从这里实现音频已经证明非常困难......我一直在尝试使用AV播放器?我仍然不知道这是否是正确的选择......对此的任何帮助也将不胜感激。
我有.plists表格中的文字,缩略图名称和曲目名称,.mp3文件和缩略图正确放置在我的项目中。然而,音频无法开始工作。
这是我的.m文件的代码。
#import "ASMRTableViewController.h"
@interface ASMRTableViewController ()
@end
@implementation ASMRTableViewController
{
NSArray *names;
NSArray *thumbnails;
NSArray *tracks;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Find out the path of the property list
NSString *path = [[NSBundle mainBundle] pathForResource:@"ExternalData" ofType:@"plist"];
// Load the file content and read the data into arrays
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];
names = [dict objectForKey:@"Name"];
thumbnails = [dict objectForKey:@"Thumbnail"];
tracks = [dict objectForKey:@"Track"];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [names count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ASMRTableIdentifier = @"ASMRTableItem";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ASMRTableIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ASMRTableIdentifier];
}
cell.textLabel.text = [names objectAtIndex:indexPath.row];
cell.imageView.image = [UIImage imageNamed:[thumbnails objectAtIndex:indexPath.row]];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//Checkmark
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
//Selecting an option
if (cell.accessoryType == UITableViewCellAccessoryNone)
{
//Initialise Alert
UIAlertView *messageAlert = [[UIAlertView alloc]
initWithTitle:@"Option Selected"
message:[names objectAtIndex:indexPath.row]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
// Display Alert Message
[messageAlert show];
//Add Tick
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
//Deselecting an option
else
{
//Initialise Alert
UIAlertView *messageAlert = [[UIAlertView alloc]
initWithTitle:@"Option Deselected"
message:[names objectAtIndex:indexPath.row]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
// Display Alert Message
[messageAlert show];
//Remove Tick
cell.accessoryType = UITableViewCellAccessoryNone;
}
}
@end
我很乐意提供更多信息,遗憾的是我的知识非常有限。
答案 0 :(得分:0)
您可能会看到重复的复选标记,因为tableview正在重复使用单元格。重新使用的单元格中的数据不会自动清除下一个使用它的单元格,因此您必须确保在cellForRowAtIndexPath中为单元格设置所有的UI元素。在您的情况下,您所要做的就是创建一个数组来记住每个轨道的“已检查”/“未选中”状态,然后在cellForRowAtIndexPath中设置该单元的附件类型。
对于音频,请尝试使用AVAudioPlayer。有一堆非常好的基础教程可以指导您使用它。如果您仍然遇到问题,可以发布一些音频代码。