2009-12-30 44 views
1

我正在創建一個應用程序,並且我有一個自定義的tableview頭。但有時候頭部會被重複。它在tableview中佔據一排。我如何解決這個奇怪的問題?順便說一句,我的tableviewstyle是純的,標題高度是44.0,頁腳高度是0.0。這是一個如何顯示的圖像。標題「評論」重複在標題「消息」下面,而它應該是該行。UITableView中的Section headerview重複

alt text http://i48.tinypic.com/28le59d.jpg

下面是這種觀點的完整實現

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
[super viewDidLoad]; 
TitleForSectionView=[[NSArray arrayWithObjects:@"Dates To Remember",@"Messages",@"Comments",@"Wishlist",@"Reminders",@"Bookmarks",nil] retain]; 
self.MySectionIndexArray=[[NSMutableArray alloc] init]; 
[self.MySectionIndexArray addObject:@"UP"]; 
[self.MySectionIndexArray addObject:@"DOWN"]; 
[self.MySectionIndexArray addObject:@"DOWN"]; 
[self.MySectionIndexArray addObject:@"DOWN"]; 
[self.MySectionIndexArray addObject:@"DOWN"]; 
[self.MySectionIndexArray addObject:@"DOWN"]; 
self.IconsForSectionsView=[[NSMutableArray alloc] init]; 
[self.IconsForSectionsView addObject:[UIImage imageNamed:@"IconCalender.png"]]; 
[self.IconsForSectionsView addObject:[UIImage imageNamed:@"IconMessage.png"]]; 
[self.IconsForSectionsView addObject:[UIImage imageNamed:@"IconComments.png"]]; 
[self.IconsForSectionsView addObject:[UIImage imageNamed:@"IconWishList.png"]]; 
[self.IconsForSectionsView addObject:[UIImage imageNamed:@"IconReminder.png"]]; 
[self.IconsForSectionsView addObject:[UIImage imageNamed:@"IconBookMark.png"]]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {  
return 6; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
if ([[self.MySectionIndexArray objectAtIndex:section] isEqualToString:@"UP"]) { 
    return 4; 
} else { 
return 0; 
} 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

UITableViewCell *MyDashBoardCell=nil; 
static NSString *[email protected]"AddNewDateCell"; 
static NSString *CellIdentifier = @"DashBoardCell"; 

DashBoardCustomCellObject = (DashBoardCustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (DashBoardCustomCellObject == nil) { 
    [[[[NSBundle mainBundle] loadNibNamed:@"DashBoardCustomCell" owner:self options:nil] retain]autorelease]; 
} 
[DashBoardCustomCellObject SetDashBoardCellData:@"Mar 9" EventText:@"My Birthday"]; 

AddNewDateCellObject = (AddNewDateCell *)[tableView dequeueReusableCellWithIdentifier:AddNewDateCellIdentifier]; 
if (AddNewDateCellObject == nil) { 
    [[[[NSBundle mainBundle] loadNibNamed:@"AddNewDateCell" owner:self options:nil] retain]autorelease]; 
} 
if(indexPath.section==0 && indexPath.row==0) 
{ 
     MyDashBoardCell=AddNewDateCellObject; 
} 
else 
{ 
    MyDashBoardCell=DashBoardCustomCellObject; 
} 
return MyDashBoardCell; 
} 



- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 

// create the parent view that will hold header Label and button and icon image 
self.customView = [[[UIView alloc] initWithFrame:CGRectMake(0,0,tableView.bounds.size.width,44)] autorelease]; 
self.customView.backgroundColor=[UIColor whiteColor]; 
// create image object 
UIImageView *icon= [[[UIImageView alloc] initWithImage:[self.IconsForSectionsView objectAtIndex:section]] autorelease]; 
icon.contentMode=UIViewContentModeCenter; 
icon.frame = CGRectMake(0,0,40,40); 

// create the label objects 
UILabel *headerLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease]; 
headerLabel.backgroundColor = [UIColor clearColor]; 
headerLabel.font = [UIFont boldSystemFontOfSize:13]; 
headerLabel.frame = CGRectMake(53,11,172,21); 
headerLabel.text = [TitleForSectionView objectAtIndex:section]; 
headerLabel.textColor = [UIColor blackColor]; 
headerLabel.highlightedTextColor=[UIColor whiteColor]; 

    // create the button objects 
ButtonDrop = [[[UIButton alloc] initWithFrame:CGRectMake(278, 9, 25, 25)] autorelease]; 
ButtonDrop.tag=section; 
if ([[self.MySectionIndexArray objectAtIndex:section] isEqualToString:@"UP"]) 
{ 
    [ButtonDrop setBackgroundImage:[UIImage imageNamed:@"Up.png"] forState:UIControlStateNormal]; 
    self.customView.backgroundColor=[UIColor blueColor]; 
    headerLabel.highlighted=YES; 
} 
else 
{ 
     [ButtonDrop setBackgroundImage:[UIImage imageNamed:@"Down.png"] forState:UIControlStateNormal]; 
} 
[ButtonDrop addTarget:self action:@selector(checkAction:) forControlEvents:UIControlEventTouchUpInside]; 
[self.customView addSubview:icon]; 
[self.customView addSubview:headerLabel]; 
[self.customView addSubview:ButtonDrop]; 
return self.customView; 
} 


- (void)checkAction:(id)sender 
{ 
UIButton *Button = (UIButton*)sender; 
NSLog(@"Button Tag=%d",Button.tag); 
if([[self.MySectionIndexArray objectAtIndex:Button.tag] isEqualToString:@"UP"]) 
{ 
    [self.MySectionIndexArray replaceObjectAtIndex:Button.tag withObject:@"DOWN"]; 
    [ButtonDrop setBackgroundImage:[UIImage imageNamed:@"Up.png"] forState:UIControlStateNormal]; 
} 
else 
{ 
    [self.MySectionIndexArray replaceObjectAtIndex:Button.tag withObject:@"UP"]; 
    [ButtonDrop setBackgroundImage:[UIImage imageNamed:@"Down.png"] forState:UIControlStateNormal]; 
} 
[TableDashBoard reloadSections:[NSIndexSet indexSetWithIndex:Button.tag] withRowAnimation:UITableViewRowAnimationFade]; 

} 
+0

代碼中的哪個類顯示註釋視圖?該評論應該是一個錶行單元格還是它應該是一個標題視圖? – TechZen 2009-12-31 16:35:11

+0

它是一個標題view.but有時它會自動變成row.I不知道是我張貼我的完整代碼 – 2010-01-02 07:06:38

回答

1

我覺得有幾個解釋相關的:

(1)你顯示一個空的節頭部分會導致兩個標題出現在另一個的頂部,而沒有行之間。 (2)你正在返回一個標題視圖作爲一個行單元格在– tableView:cellForRowAtIndexPath:由於標題「它代替了tableview中的一行」我認爲這是最可能的解釋。請檢查– tableView:viewForHeaderInSection:

+0

我發佈我的代碼看看它是否有幫助 – 2009-12-31 06:22:54

2

嘗試爲空白部分設置零高度的行。這似乎使他們正確繪製我。