2012-09-04 48 views
1

在我的應用我有一個基本的風格細胞的動態列表中的tableview。每個單元格的textLabel都是從xml中提取的,並且包含下劃線來代替空格。我使用標籤文本標識在didSelectRowAtIndexPath中點擊哪個單元格,並將其與其他xml文件中相同字符串的其他匹配項匹配。爲此,標籤需要包含下劃線,但是如果它們是空格,它看起來會更好。顯示下劃線作爲空間標籤

所以我的問題是,我可以設置LabelText的顯示下劃線爲空格,但保留了下劃線基礎字符串中所以它仍然在那裏下劃線使用的XML相匹配?

+0

我會重新考慮你的表視圖控制器的體系結構。您不應該將其顯示方式與其在模型中的表示方式緊密結合。您需要允許視圖(本例中的表格視圖和單元格)能夠將數據對象轉換爲對用戶有意義的表示形式,而不考慮底層表示形式。有什麼辦法可以通過跟蹤數據索引來做到嗎?即您的數據是否在已排序的數組中,您可以在點擊單元格時從索引路徑中查找原始值? –

+0

我正在將數據存儲在MutableArray中,因爲它是由NSXMLParser讀取的。所以我相信我可以通過將索引存儲在匹配單元的標記中來使用數組索引訪問數據。我知道使用表格中的單元格將數據傳遞到下一個視圖是糟糕的設計。感謝您的建議@CarlVeazey – ThunderHorse

+0

非常歡迎,讓我知道我是否可以幫助你。 –

回答

3

您可以使labelText顯示任何你喜歡的東西。在tableView:cellForRowAtIndexPath:中,僅使用一個字符串配置單元格,該字符串用空格代替下劃線(請參見stringByReplacingOccurrencesOfString:withString:即可輕鬆完成此操作)。

+0

謝謝,我會給stringByReplacingOccurrencesOfString一個去。 – ThunderHorse

0

您可以創建一個新的字符串用空格代替_。這將使你的原始字符串保持不變(這通常不是問題,因爲它可能是不可變的(即NSString不是NSMutableString))。

self.labelText.text = [incomingString stringByReplacingOccurrencesOfString:@"_" withString:@" "]; 
1

你可以有從XML拉,然後下劃線過濾成的空間,當你把標籤插入顯示單元的字符串數組。這可能是我的方法。或者對於這個問題,你可以在兩個方向上過濾字符串,但是從XML文件中存儲版本可能更直接,我的意見無論如何。

+0

我曾考慮這個選項,但使用stringByReplacingOccurrencesOfString來改變字符串時,在我看來是一個更優雅的解決方案。如果我錯了,按照你的建議維護一個數組是一個很好的後備選擇。 – ThunderHorse

0

您可以創建一個NSValueTransformer的子類,它只是將'_'替換爲'',但不會影響該值,但如果該按鈕的stringValue綁定到該值,則會改變外觀並帶有值轉換器選項。

這是假定該按鈕的stringValue的是通過綁定設置,其他的答案承擔文本手動設置。

+0

iOS上的綁定是否可用? –

1

正如我在我的評論說,我不認爲目前的設計是最佳的要求,但如果有絕對沒有其他辦法做到這一點比基本存儲單元的標籤數據,我會做它是這樣的:

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)ip 
{ 
    /* instantiate cell here */ 
    NSString *cellText = /* however you need to get the cell text */; 
    cellText = [cellText stringByReplacingOccurrencesOfString:@"_" withString:@" "]; 
    cell.textLabel.text = cellText; 
    /* whatever other cell setup you need */ 
} 
在選擇回調

然後:

- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)ip 
{ 
    UITableViewCell *cell = [tv cellForRowAtIndexPath:ip]; 
    NSString *cellText = cell.textLabel.text; 
    cellText = [cellText stringByReplacingOccurrencesOfString:@" " withString:@"_"]; 
    /* go do whatever with cellText */ 
} 

希望這有助於。