2013-11-29 63 views
0

我已經創建了一個包含3個UILabels和一個UIImageView的自定義UITableViewCell。我通過故事板設置它,並且有一個UITableView類連接到表格單元格。在那個類中,我想要處理不同的UI對象,並且可以選擇從我的視圖控制器傳入信息。UITableViewCell正在加載填充內容而不是編程輸入?

這裏是我的表格單元格視圖類

@property (retain, nonatomic) IBOutlet GBPathImageView *ProfileThumbnailImageView; 
@property (weak, nonatomic) IBOutlet UILabel *profileDisplayNameLabel; 
@property (weak, nonatomic) IBOutlet UILabel *profileUniversityNameLabel; 
@property (weak, nonatomic) IBOutlet UILabel *profileNumberOfStringsLabel; 

@property (strong, nonatomic) NSString *profileDisplayName; 
@property (strong, nonatomic) UIImage *profileThumbnailImage; 
@property (strong, nonatomic) NSString *profileUniversityName; 
@property (nonatomic) NSUInteger profileNumberOfStrings; 


- (id)initWithProfileImage:(UIImage *)profileImage 
       displayName:(NSString *)displayName 
      universityName:(NSString *)universityName 
     numberOfUserStrings:(NSUInteger)numberOfStrings; 

的.H正如你可以看到我有所有的故事板對象都連接到一個屬性插座。我還擁有每件必要信息的屬性。在我的視圖控制器

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

方法,我想實例化,我傳遞信息這個自定義單元格。我想用正確的信息設置信息的屬性,讓它可以在視圖類設置。

這就是前面提到的方法中的代碼:

static NSString *cellIdentifier = @"UserProfileCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    if ([cell isKindOfClass:[StringrUserTableViewCell class]]) { 

     StringrUserTableViewCell * userProfileCell = (StringrUserTableViewCell *)cell; 

     userProfileCell.profileDisplayName = @"Alonso Holmes"; 

     //userProfileCell.profileDisplayNameLabel.text = @"User Name"; 
    } 

我有兩行有,一個是設置信息屬性的名稱,而且我已經在視圖中的.m文件來設定其文本到該屬性名稱。發生的問題是profileDisplayName屬性在嘗試設置UILabels文本時爲空。我怎樣才能一次設置這些信息,以便在單元格加載之前或初次加載時它會在那裏?您也可以看到註釋掉的一行,我直接在那裏設置UILabel的文字。我寧願不這樣做,因爲我想把抽象/邏輯留給視圖的類。我設置的圖像視圖是自定義的,因此需要更多的代碼。

+0

你確定cell不是null嗎? – chancyWu

+0

該單元格絕對不是null。我設置了一個測試,以便點擊一個單元格並轉到新頁面。我將信息傳遞給新的頁面,這恰好是信息持有屬性。新頁面正確顯示信息。看來,UILabels和UIImageView在信息持有屬性獲取信息之前加載到屏幕上。這就是UI對象加載空白的原因。我需要以某種方式在屏幕上載入信息之前將信息提供給他們。 – Jonathan

+0

如果您在cellForRowAtIndexPath方法中正確設置了單元格,它們應該一起加載 – chancyWu

回答

0

您正在嘗試將profileDisplayName中的文字設置爲NSString類型,而不是UILabel類。 (見@property (strong, nonatomic) NSString *profileDisplayName;)。 更改您的代碼行: 這裏是問題

userProfileCell.profileDisplayName = @「Alonso Holmes」; //使用標籤對象而不是NSString

+0

我想通過使用profileDisplayNameLabel.text屬性來設置UILabel的文本。我需要將標籤文本設置爲其他屬性內的NSString。 – Jonathan

+0

所以你會請你分享你設置單元格的標籤文本的代碼行 –

+0

在UiTableViewCell類中,我重寫了UILabels setter方法。 (void)setProfileDisplayNameLabel:(UILabel *)displayName { [displayName setText:self.profileDisplayName]; } 我知道這很混亂,因爲UILabel和NSString屬性名稱非常相似,但希望您可以在這裏看到。 – Jonathan

相關問題