当我尝试使用自定义单元格将数据从数组加载到我的表中时,它只显示最后一个单元格,就像覆盖所有单元格一样,直到我到达列表末尾。该表是以编程方式创建的,当单元格未加载空白表时滚动。但是,如果我加载单元格,那么只显示最后一个单元格,它不会滚动。
我认为我写了一个错字或其他什么,但我真的看不到任何有用的东西。解析器工作,数组很好,只是细胞表现得很奇怪。我想做到这一点,以便我在桌子上有一个固定的栏,但首先我需要让自定义单元格显示在表格中并正确滚动
@interface Schedule : UIViewController <UITableViewDelegate, UITableViewDataSource> {
IBOutlet UITableView *newsTable;
UIActivityIndicatorView *activityIndicator;
CGSize cellSize;
NSXMLParser *fileParser;
NSMutableArray * events;
NSMutableArray * announcements;
NSMutableDictionary * item;
NSString *currentElement;
NSMutableString * currentTitle, * currentDate, * currentSummary, * currentId, * curr entTime, *currentContent;
UITableViewCell *appCell;
}
@property(nonatomic, retain)IBOutlet UITableView *newsTable;
@property(nonatomic, retain)IBOutlet UITableViewCell *appCell;
-(void)parseXMLFileAtURL:(NSString *)URL;
@end
- (void)loadView{
UITableView *tableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]
style:UITableViewStylePlain];
tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
tableView.delegate = self;
tableView.dataSource = self;
tableView.tag = 4;
[tableView reloadData];
self.view = tableView;
[tableView release];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [events count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"MyCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
cell = appCell;
self.appCell = nil;
}
// Configure the cell.
UILabel *label;
label = (UILabel *)[cell viewWithTag:1];
int eventIndex = [indexPath indexAtPosition: [indexPath length] - 1];
label.text = [[events objectAtIndex: eventIndex] objectForKey: @"event"];
return cell;
}
- (void)parserDidEndDocument:(NSXMLParser *)parser {
NSLog(@"webpage parsed");
NSLog(@"events array has %d items", [events count]);
newsTable = (UITableView*)[self.view viewWithTag:4];
[newsTable reloadData];
}
我添加了更多代码,问题可能在其他地方。
答案 0 :(得分:0)
我认为你的问题是细胞正在被释放。当您调用self.appCell = nil;
时,将释放该对象并将变量设置为nil。尝试将cell = appCell;
更改为cell = [[appCell retain] autorelease];
,以便将单元格保留足够长的时间以使表格视图再次保留。
此外,您可以将int eventIndex = [indexPath indexAtPosition: [indexPath length] - 1];
更改为int eventIndex = indexPath.row;
。行和节属性被添加到NSIndexPath中专门用于UITableView,并且保证传递给cellForRowAtIndexPath:的索引路径将包含两个索引。
答案 1 :(得分:0)
尝试使用以下代码;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *CellIdentifier = @"CellIdentifier";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; // CustomCell is the class for standardCell
if (cell == nil)
{
NSArray *objectList = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
for (id currentObject in objectList) {
if([currentObject isKindOfClass:[UITableViewCell class]]){
cell = (CustomCell*)currentObject;
break;
}
}
cell.label.text = [[events objectAtIndex: indexPath.row] objectForKey: @"event"];
}
return cell;
}
当您使用NSBundle加载xib文件时,它将返回一个Bundle数组。然后你必须检查然后再使用它。
如果您尝试过;
NSString *memberName; // member variable
NSString *name = memberName;
memberName = nil;
// the member variable "memberName, giving the reference to name;
//So if you set memberName as nil, name also become a nil value.
// You have to use like;
name = [memberName retain];
memberName = nil;
尝试了解有关iPhone开发文档的更多信息。
文件的Click here Click here示例代码。
我认为它会对你有所帮助。