2011-06-13 19 views
2

被部分取代的我有幾個UITableViewcells(UITableViewCellStyleSubtitle)一個UITableView。當用戶點擊其中一個單元格時,我推送一個細節VC,允許用戶更改單元格的文本。當我彈出此視圖控制器,在單元格中的文本顯示縮寫以省略號:的UITableViewCell的textLabel.text由省略號

前:

Before editing

後: 將text改爲 「Wartyrl」 啪後細節VC。

After editing

如果我在任何其他電池接頭,省略號消失,並顯示正確的文本。什麼可能導致這種情況?

這是(通過委託方法)改變單元格的文本的代碼:

#pragma mark - FRREditTaskViewControllerDelegate 
-(void) editTaskViewController:(FRREditTaskViewController *)sender 
      didChangeNameForTask:(FRRFlatTask *)aTask{ 
    NSIndexPath *idx = [NSIndexPath indexPathForRow:[self.pendings indexOfObject:aTask] inSection:0]; 
    [self.tableView cellForRowAtIndexPath:idx].textLabel.text = aTask.name; 
} 

順便說一句,該代碼被彈出細節VC之前和同時的UITableViewController仍然隱藏稱爲。我不知道這是否相關。

回答

1

看來,爲textLabel猶豫來調整其寬度。如果它太堅決改變,只需使用[tableView reloadData]直接重新加載tableView即可。

如果你不想重新加載整個的tableView,您可以重新加載就這樣下面特定的細胞。

NSIndexPath *idx = [NSIndexPath indexPathForRow:[self.pendings indexOfObject:aTask] inSection:0]; 
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:idx] withRowAnimation:UITableViewRowAnimationFade]; 

這改變爲textLabel的文本的單元格時會表現出不錯的動畫漸變。

+0

我很猶豫重新裝入數據,但它可能是唯一的方法。有沒有一種方法來強制單元格調整大小? – cfischer 2011-06-13 18:05:42

+0

@Fernando,看看我更新的答案 – EmptyStack 2011-06-14 10:36:36

2

在創建單元,該的UILabel只是大到足以處理的初始文本(它不動態調整)。在更改文字(didChangeNameForTask方法的末尾)後,調用[self.tableView reloadData]應使其正確顯示。

+0

是否有任何方法來強制它調整大小? – cfischer 2011-06-13 18:06:43

1
-(void) editTaskViewController:(FRREditTaskViewController *)sender 
     didChangeNameForTask:(FRRFlatTask *)aTask{ 

    NSIndexPath *idx = [NSIndexPath indexPathForRow:[self.pendings indexOfObject:aTask] inSection:0]; 


    UITableViewCell *thiscell=[self.tableView cellForRowAtIndexPath:idx]; 

    thiscell.textLabel.text =[nsstring stringwithFormat:@"%@",aTask.name]; 

    [self.tableView reloadRowsAtIndexPaths: [NSArray arrayWithObject:idx] withRowAnimation:NO];//if u dont want to use reload data then use like this or use 

    //- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation 


} 
+0

它也不起作用。 – cfischer 2011-06-13 18:04:13

+0

@Fernando請檢查我的回答 – 2011-06-13 18:17:37

+0

請回復..... – 2011-06-13 18:19:30

2

您可以撥打[cell.textLabel sizeToFit]

在許多情況下,它的清潔劑,而不是更新的內部數據和呼叫reloadRowsAtIndexPaths:withRowAnimation:。這樣你就不會有太多的東西在瑣碎的細胞實現細節(當你改變主意如何佈置它時)。它還確保您的真實數據與細胞相匹配。

即使更好在大多數情況下是創建一個UITableViewCell子類,稱爲TaskTableViewCell。你把它一個Task並觀察Task與國際志願者組織,管理自己的佈局(包括在需要時調用sizeToFit)。這樣你就不需要委託方法來告訴你它何時更新。任務更改時,單元會自動更新自身。這將所有佈局問題移入單元類並從數據源移出。