2013-03-25 53 views
1

正常使用此代碼應劃清界限了細胞:addSubView不上的UITableView

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 
    if (nil==cell){ 
     cell = [[UITableViewCell alloc] 
           initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 
    } 

    NSString *currentCourseName=[courseKeys objectAtIndex:[indexPath row]]; 
    [[cell textLabel] setText:currentCourseName]; 
    NSLog(currentCourseName); 
    CGSize size = [cell.textLabel.text sizeWithFont:cell.textLabel.font]; 
    CGFloat y = cell.contentView.frame.size.height/2; 

    UIView *line = [[UIView alloc] initWithFrame:CGRectMake(5,y,size.width, 3)]; 
    line.backgroundColor = [UIColor redColor]; 
    [cell.textLabel addSubview:line]; 

    return cell; 

} 

但似乎我必須滾動幾次看到紅線。 enter image description here

回答

1

我認爲你要添加在,而不是添加在您的視圖 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath mehod,請嘗試使用自定義的電池概念。這解決了這個問題在我的UITableView

Creating a custom Table View Cell programmatically

Custom Table View Cells in iPad Programming

+0

這肯定會起作用,但這只是一種解決方法。學習如何編程的方法是理解錯誤。 – Sulthan 2013-03-25 12:52:24

0
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 
    if (nil==cell){ 
     cell = [[UITableViewCell alloc] 
           initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 

    NSString *currentCourseName=[courseKeys objectAtIndex:[indexPath row]]; 
    [[cell textLabel] setText:currentCourseName]; 
    NSLog(currentCourseName); 
    CGSize size = [cell.textLabel.text sizeWithFont:cell.textLabel.font]; 
    CGFloat y = cell.contentView.frame.size.height/2; 

    UIView *line = [[UIView alloc] initWithFrame:CGRectMake(5,y,size.width, 3)]; 
    line.backgroundColor = [UIColor redColor]; 
    [cell.contentView addSubview:line]; 

    } 



    return cell; 

} 
+0

爲 '的UILabel' 不可見@interface聲明選擇 '內容查看:' – Maysam 2013-03-25 12:32:22

+0

嘗試用[cell.contentView addSubview:行] – iPatel 2013-03-25 12:34:15

+0

要放線的UITableView? – iPatel 2013-03-25 12:35:19

2

我看到你的代碼的兩個問題。

首先

CGFloat y = cell.contentView.frame.size.height/2;

當您創建單元格時,contentViewframe是什麼?如果您將子視圖添加到標籤,請使用標籤的高度。

CGSize size = [cell.textLabel.text sizeWithFont:cell.textLabel.font]; 
UIView *line = [[UIView alloc] initWithFrame:CGRectMake(5, cell.textLabel.bounds.size.height/2.0f - 1.5f, size.width, 3)]; 
line.autoresizingMask = (UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin); 

[cell.textLabel addSubview:line];

如果單元格被重用,要添加行單元格時,已經有一條線。首先檢查textLabel子查看次數。

if (cell.textLabel.subviews.count == 0) { 
    [cell.textLabel addSubview:line]; 
} 
+0

感謝您的回答,對於第一個問題,這是y的位置,沒關係。但第二個問題,是的,你是對的。 – Maysam 2013-03-25 12:40:27

+0

@Maysam'y'的位置可能是真正重要的。如果你的線路超出了標籤的範圍,因爲你的'y'計算不正確? 'NSLog'你的視圖框架,你會發現問題。請注意,在創建單元格和重用單元格時,contentView的大小會有所不同。 – Sulthan 2013-03-25 12:48:54

+0

我用你的代碼,它仍然是相同的 – Maysam 2013-03-25 12:52:38