2013-11-02 167 views
0

我正在使用以下代碼來顯示自定義UITableViewCell。但問題是它只顯示backImage而不顯示任何其他標籤或圖像。UITableViewCell不顯示子視圖

這是代碼和ss。

有什麼問題?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UIImageView *maleIcon; 
    UIImageView *femaleIcon; 
    UIImageView *backImage; 

    UILabel *name; 
    UILabel *address; 
    UILabel *maleCount; 
    UILabel *femaleCount; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"]; 

    VenueClass *venue = [self.venueArray objectAtIndex:[indexPath row]]; 

    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyIdentifier"]; 
     backImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)]; 

     maleIcon = [[UIImageView alloc] initWithFrame:CGRectMake(234,143,25,25)]; 
     femaleIcon = [[UIImageView alloc] initWithFrame:CGRectMake(234,173,25,25)]; 

     maleIcon.image = [UIImage imageNamed:@"rectangle.png"]; 
     femaleIcon.image = [UIImage imageNamed:@"rectangle.png"]; 

     name  = [[UILabel alloc] initWithFrame:CGRectMake(10,148,140,22)]; 
     address  = [[UILabel alloc] initWithFrame:CGRectMake(10,178,140,22)]; 
     maleCount = [[UILabel alloc] initWithFrame:CGRectMake(266,145,48,22)]; 
     femaleCount = [[UILabel alloc] initWithFrame:CGRectMake(266,175,48,22)]; 

     name.font  = [UIFont boldSystemFontOfSize:16]; 
     address.font  = [UIFont systemFontOfSize:14]; 
     maleCount.font = [UIFont boldSystemFontOfSize:14]; 
     femaleCount.font = [UIFont boldSystemFontOfSize:14]; 

     name.backgroundColor  = [UIColor clearColor]; 
     address.backgroundColor  = [UIColor clearColor]; 
     maleCount.backgroundColor = [UIColor clearColor]; 
     femaleCount.backgroundColor = [UIColor clearColor]; 

     name.textColor  = [UIColor whiteColor]; 
     address.textColor  = [UIColor whiteColor]; 
     maleCount.textColor = [UIColor whiteColor]; 
     femaleCount.textColor = [UIColor whiteColor]; 

     [cell.contentView addSubview:backImage]; 
     [cell.contentView addSubview:name]; 
     [cell.contentView addSubview:address]; 
     [cell.contentView addSubview:maleCount]; 
     [cell.contentView addSubview:femaleCount]; 
     [cell.contentView addSubview:femaleIcon]; 
     [cell.contentView addSubview:maleIcon]; 

    } 

    CLLocation *location = [[CLLocation alloc] initWithLatitude:[venue.latitude doubleValue] longitude:[venue.longitude doubleValue]]; 

    AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 
    int distance = [location distanceFromLocation:appDelegate.myLocationCtrl.locationManager.location]; 
    distance = distance/1000; 

    [femaleCount setText:venue.femaleCount]; 
    [maleCount setText:venue.maleCount]; 
    [name  setText:venue.name]; 
    [address  setText:[NSString stringWithFormat:@"%@/%d Km", venue.address, distance]]; 

    cell.accessoryType = UITableViewCellAccessoryNone; 
    cell.backgroundColor = [UIColor clearColor]; 


    NSString *path = [[NSString stringWithFormat:@"%@%@" ,IMAGE_URL, venue.imagePath ] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

    [backImage setImageWithURL:[NSURL URLWithString:path] placeholderImage:[UIImage imageNamed:@""] 
        completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) 
    {   
    }]; 

    return cell; 
} 

enter image description here

+0

你試過了嗎[[cell.contentView sendSubviewToBack:backImage];'? –

回答

1

是你的背部圖像是太寬,高大的你將其設置爲的320x100嘗試60x100

對不起編輯:您的其他物品都關閉屏幕/細胞,因爲它們是Y座標> 100。 Tr減少你的initWithFrame的第二個參數:CGRectMake(X,Y必須小於單元格的高度,寬度,高度)

+0

[cell.contentView addSubview:backImage]; 它是在第一個地方。我也嘗試刪除它。仍然沒有顯示出來... –

+0

更新:你的Y值是太大的細胞 –

+0

血腥地獄....... omg你的權利....我怎麼沒有看到這... –

0

你有沒有在你的代碼註冊的類標識符MyIdentifier以前?

如果是這樣,那麼cell永遠不會爲零,因爲dequeueReusableCellWithIdentifier:方法將始終返回一個單元格。從文檔:reuseIdentifier:方法

如果你註冊了一個類指定的標識符,並且必須創建一個新的細胞,這種方法通過調用其initWithStyle初始化的單元格。對於基於筆尖的單元格,此方法從提供的nib文件加載單元格對象。如果現有單元可供重用,則此方法將調用單元的prepareForReuse方法。

這意味着你的代碼永遠不會運行,你的if(cell == nil){}語句中進行設置

如果您沒有註冊爲重用標識符的類或筆尖,應用程序應該與崩潰例外,所以我懷疑你在應用中看到的是你註冊的默認筆尖或類。

一種常用的方法是在您的自定義UITableViewCell類或您的筆尖中配置所有這些子標籤和imageView,然後在此tableView:cellForRowAtIndexPath:方法中將相關值分配給這些屬性。

+0

它正在執行該操作。問題是隻有backImage is workiong,沒有其他視圖正在工作 –

+0

您是否在您的原型UITableViewCell子類或筆尖中設置了backImage?您必須在某個地方註冊其中一個,並且原始原型是正在加載的。 if(cell == nil)語句中的代碼永遠不會運行。你可以通過在該語句中設置一個斷點來驗證它是否被調用。 –