我試圖在xcode中構建一個應用程序,該應用程序在其他人閱讀rss提要並顯示帖子。我是新的Objective-C,有時候會覺得有點困難。Objective C UITableView - 在更改單元格高度後,表單元格顯示錯誤的內容
我對檢索到的故事(帖子)使用NSMutableArray。每個故事都由一個NSMutableDictionary表示,其中包含帖子的標題,主題,日期和鏈接。所有這些都顯示在UIViewController中的UITableView中。 我已經自定義了我自己的單元格,所以我可以在其中顯示多個標籤。
我的問題是,如果我使用tableView:heightForRowAtIndexPath :,前5個單元格(適合屏幕)顯示好,但如果向下滾動,下一個單元格顯示具有相同的內容與前5(即單元格0 -4顯示正常,單元格5包含單元格0的內容,單元格1的單元格6等)!如果我刪除的tableView:heightForRowAtIndexPath:一切都蠻好的(除了沒有我想要的單元尺寸)
以下是關於代碼看起來:
// NavigationContentsViewController.h
@interface NavigationContentsViewController :
UIViewController <UITableViewDelegate, UITableViewDataSource> {
UITableView *myTableView;
IBOutlet UITableView * newsTable;
UIActivityIndicatorView * activityIndicator;
CGSize cellSize;
NSXMLParser * rssParser;
NSMutableArray * stories;
NSMutableDictionary * item; // it parses through the document, from top to bottom...
NSString * currentElement;
NSMutableString * currentTitle, * currentDate, * currentSummary, * currentLink;
}
@property(nonatomic,retain)NSMutableArray *itemsList;
@property(nonatomic,retain)UITableView *myTableView;
- (void)parseXMLFileAtURL: (NSString *)URL;
。
//NavigationContentsViewController.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Configure the cell.
static NSString *MyIdentifier = @"MyIdentifier";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil){
cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
// Set up the cell
int storyIndex = indexPath.row;
//[cell setText:[[stories objectAtIndex: storyIndex] objectForKey: @"title"]];
//Story title
//cell.textLabel.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"];
//cell.textLabel.font = [UIFont boldSystemFontOfSize:14];
cell.lTitle.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"];
cell.lSummary.text = [[stories objectAtIndex: storyIndex] objectForKey: @"summary"];
cell.lDate.text = [[stories objectAtIndex: storyIndex] objectForKey: @"date"];
return cell;
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *selectedCellItem = [NSString stringWithFormat:@"%d", indexPath.row];
TableViewController *fvController = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:[NSBundle mainBundle]];
fvController.selectedCellItem = selectedCellItem;
[self.navigationController pushViewController:fvController animated:YES];
[fvController release];
fvController = nil;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 80;
}
任何線索? [編輯:改變int storyIndex = indexPath.row;]
你能解釋一下爲什麼使用'int storyIndex = [indexPath indexAtPosition:[indexPath length] - 1];'而不是'int storyIndex = indexPath.row;'' – knuku
如果有涉及的部分,它確實有點複雜......在這種情況下,我建議您爲每個部分創建多個NSMutableArrays(但是,然後再次,您可能必須創建一個更大的數組來存儲它,或者如果它變得太大,你將不得不直接從磁盤加載)。 – FeifanZ
@ NR4TR首先感謝與我的問題打擾! 正如寫道,這是我第一次應付obj-c,所以有很多次我可以使用錯誤的東西,或用奇怪的方式做事。只是讀你的讚揚,我感到很傻... 無論如何,這不會改變任何關於我的問題:) – CrisDeBlonde