2014-09-02 44 views
1

失敗,這是我目前有:的Xcode - IF語句heightForRowAtIndexPath

在的cellForRowAtIndexPath

if ([userSelection isEqualToString:comparison]){ 

    changeHeight = NO; 

} else if(![userSelection isEqualToString:comparison]) { 
    [cell setHidden:YES]; 
    changeHeight = YES; 
} 
return cell; 

這裏是heightForRowAtIndexPath

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if(changeHeight == YES) { 
    return 0; 
} else return 44; 

changeHeight = NO; 
} 

的if語句是的cellForRowAtIndexPath完美的作品,但是heightForRowAtIndexPath中的那個不計算,並且總是返回44 - 無論cellForRowAtIndexPath中的等式是否爲真。

任何想法?

回答

1

您沒有正確保持狀態,並且正在調用cellForRowAtIndexPath之後立即調用heightForRowAtIndexPath可能是真實的,但我希望調用的順序是未定義的,它甚至可能不會針對同一個單元調用。

因此,您需要保持每個單元的狀態,而不是單個「changeHeight」標誌。

現在我不能爲你設計所有的東西,但你只需要擴展你的模型數據來保存你想要的每個單元的高度。

而且想想本聲明(事不關你的問題,但你仍然需要梳理出來):

if ([userSelection isEqualToString:comparison]){ 

} else if(![userSelection isEqualToString:comparison]) { 

} 
+0

謝謝你,我想我明白了。儘管如此,卻無法弄清楚聲明中的錯誤。它可能非常明顯,但我看不到它 – user3580512 2014-09-02 09:39:24

+0

@ user3580512嘿嘿,好的,如果'x =='y''那麼就不需要'else if x!='y''。你可以用'else'替換'else if(...)'。 – trojanfoe 2014-09-02 09:44:30

+1

哦,該死的,我怎麼沒看見。我想我需要休息一下!謝謝 – user3580512 2014-09-02 09:46:23

0

heightForRowAtIndexPathcellForRowAtIndexPath之前被調用。因此changeHeight沒有正確的狀態。並考慮您的if...elsetrojanfoe's問題。

1

基本上heightForRowAtIndexPathcellForRowAtIndexPath之前被調用。最好是像下面這樣做。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return ([userSelection isEqualToString:comparison])?44.0f:0.0f; 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [cell setHidden:![userSelection isEqualToString:comparison]]; 
    /* Your stuff */ 
} 
+0

+1是的,這可能是所有需要的。 – trojanfoe 2014-09-02 09:48:27

+0

謝謝,我很快就會給你一個旋轉 – user3580512 2014-09-02 11:07:08

+0

歡迎你... – 2014-09-02 11:34:49