2010-03-02 72 views
9

我有一些非常簡單的代碼返回標題節標題:的UITableView titleForHeaderInSection無法正確顯示

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    if (section==0) { 
     return @""; 
    } else if (section==1) { 
     return @"Actions"; 
    } else if (section==2) { 
     return @"Attached To"; 
    } 

    return @""; 
} 

出於某種原因,當頭部在模擬器上實際顯示,一半的時間他們只是第一個字母,然後是省略號。上下滾動(最有可能刷新標題視圖)將導致標題正確顯示大約一半的時間,並錯誤地顯示另一半時間。

有沒有人有任何想法可能導致這種情況?我認爲這更多是最近的發展,但似乎發生在我的應用程序中幾乎所有的UITableView。我不想說這是一個3.2版的問題,但它可能在那時開始發生,但無論如何它必須以某種方式與代碼相關。謝謝。

回答

5

我已經想出辦法:用代碼返航@""實際問題。如果返回空白字符串而不是零,則會導致頁眉和頁腳顯示出現問題。

您需要改爲返回一個零字符串以使所有頁眉和頁腳正確顯示。返回空間@" "仍然會留下標題的垂直空間,因此這不是一個可行的選項。我已將return @"";的所有實例更改爲簡單return nil;

1

我複製&把你的代碼放到我的一個項目中,它的工作完美無瑕。 (sdk 3.2.1)

也許錯誤是在另一部分? 正在創建自己的表格單元?如果是這樣,你是否從「tableView:heightForRowAtIndexPath:」返回apropiate高度? (這個問題打了我一次)

1

當設置節標題標題時,我使用一個空的NSString獲得更好的成功設置爲相應的節,然後在完成時釋放該字符串;以及限制我使用嵌套的If()Else()語句。

我儘量保持簡單和乾淨。當然,對於那些我有3個以上部分的表格,我使用「Switch」語句代替If()語句。

關於這個函數的好處是它會被調用多次 - (數量的部分),並且每次都會通過代碼運行。 NSString *sectionHeader=nil;爲編譯器提供了要返回的值,而不管If()語句中嵌入了什麼內容。否則,您會收到警告,因爲編譯器不會在If()語句中搜索您的返回值。

您還可以將字符串初始化爲「默認」值,例如, NSString *sectionHeader = @"Default Header Title";。如果If()語句的非滿足,則分配的默認標題值將在整個函數中保持不變,並因此返回爲標題的sectionHeader。

基本結構如下圖:

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 

//TEMP SECTION STRING HOLDER: 
NSString *sectionHeader = nil; 


//SET TITLE FOR EACH SECTION: 
if(section == 0) { 
    sectionHeader = @"Section Header No. 1"; 
} 

if(section == 1) { 
    sectionHeader = @"Section Header No. 2"; 
} 

if(section == 2) { 
    sectionHeader = @"Section Header No. 3"; 
} 


//RETURN THE SECTION HEADER FOR EACH SECTION: 
return sectionHeader; 

}