我的主视图控制器显示UITableView
。
每个单元格都是自定义的(我已经为自定义演示文稿创建了UIView
。)
为了在tableView中显示这些项目,我使用" allFilesFolderPath"的内容填充数组。使用此代码的文件夹:
- (void)configureView {
_itemArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:allFilesFolderPath error:nil];
}
和
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [self.itemArray count];
}
我创建自定义单元格以显示它们:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = [indexPath row];
myItem = [self.itemArray objectAtIndex:row];
NSLog(@"My Item : %@", _itemArray.description);
static NSString *CellIdentifer = @"cardCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifer];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifer];
}
return cell;
}
当我使用NSLog
打印数组时,我会按字母顺序获得正确的项目列表(例如它们如何存储在我的iPhone上的文档位置):
My Item : (
Music,
Music10,
Music2,
Music3,
Music4,
Music5,
Music6,
Music7,
Music8,
Music9,
Photos,
Videos
)
但是当我在我的iPhone(或模拟器)中运行应用程序时,单元格会正确显示(按顺序),直到第八项。在这个数字之后,在我的情况下,而不是" Music8"," Music9","照片","视频"我回到了阵列的开头,所以" Music"," Music10"," Music2"和" Music3"
为了更好地了解我得到的内容,请点击此处截图:
我真的输了!我已经搜索过(并再次搜索)我做错了什么,但我找不到任何东西,一切对我来说都是正确的。
请帮助我找到我的问题,以便我能正常睡觉。
编辑:这是我设置为从我的其他类中检索myItem字符串的方法:
+ (NSString *)getItemName {
return myItem;
}
以下是我从其他课程中检索它的方法:
NSString *test = [ViewController getItemName];
_itemName.text = test;
EDIT2:这是用于设置我的自定义TableViewCell的代码 (抱歉错过了这些信息
#import "TableViewCell.h"
@implementation TableViewCell
- (void)awakeFromNib {
// Initialization code
[self cardSetup];
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
- (void)cardSetup {
_cardView.layer.masksToBounds = NO;
_cardView.layer.shadowOffset = CGSizeMake(0, 1);
_cardView.layer.shadowRadius = 1;
_cardView.layer.shadowOpacity = 0.3;
NSString *test = [ViewController getItemName];
_itemName.text = test;
}
@end
答案 0 :(得分:3)
此呼叫名为" dequeueReusableCell ..."。表视图单元格重用。如果屏幕上有8个单元格,并且向上滚动视图,则第九行将重用第一行中使用的单元格。这就是为什么你必须在cellForRowAtIndexPath中设置你的单元格,显然你拒绝这样做。
单元格仅用于显示。它们不用于存储数据。你应该有一个数据模型,每个人都可以访问。 cellForRowAtIndexPath 从该数据模型中读取。然后,如果发生某些事情(例如,通过点击单元格中的按钮)来更改数据模型,那么您将更改数据模型,并且数据模型应该告诉所有相关方模型已更改。
一个视图中的单元格和其他地方的UILabel绝对不应该连接。任何更改都应通过您的数据模型传播。
答案 1 :(得分:2)
你在myItem
的任何地方都没有使用cellForRowAtIndexPath:
你的单元格似乎是从其他方法获取文字的,当它们应该从celForRowAtIndexPath: