我有一個UITableView
帶有單節和'n'行(從NSMutableArray
,myTableArray
填充)。當進入編輯模式,我想實現以下目標:在UITableView頂部插入新行作爲進入編輯模式的一部分時編輯樣式的問題
- 設置了「N」行有
UITableViewCellEditingStyleDelete
編輯樣式 - 插入新行,原來的「N」以上,並設置它有
UITableViewCellEditingStyleInsert
編輯樣式
我UITableViewController
子類實現如下:
- (void)setEditing:(BOOL)flag animated:(BOOL)animated
{
[super setEditing:flag animated:animated];
UITableView *tableView = (UITableView *)self.view;
NSArray *topIndexPath = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]];
if (self.editing == YES)
[tableView insertRowsAtIndexPaths:topIndexPath withRowAnimation:UITableViewRowAnimationBottom];
else
[tableView deleteRowsAtIndexPaths:topIndexPath withRowAnimation:UITableViewRowAnimationBottom];
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == 0)
return UITableViewCellEditingStyleInsert;
else
return UITableViewCellEditingStyleDelete;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (self.editing == YES)
return [myTableArray count] + 1;
else
return [myTableArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// ... boiler-plate dequeueReusableCellWithIdentifier code, etc ...
if (self.editing == YES)
{
if (indexPath.row == 0)
cell.textLabel.text = @"My new row";
else
cell.textLabel.text = [myTableArray objectAtIndex:(indexPath.row - 1)];
}
else
{
cell.textLabel.text = [myTableArray objectAtIndex:indexPath.row];
}
return cell;
}
當這個代碼運行,而t他按下編輯按鈕,在原來的'n'行之上插入一個新行,但除第一行之外,第二行具有UITableViewCellEditingStyleInsert
編輯樣式。例如,如果「n」爲3,後編輯按鈕被按下表顯示:
- 行0:插入編輯風格
- 行1:插入編輯樣式(應刪除)
- 行2:刪除的剪輯風格
- 第3行:刪除剪輯風格
經過進一步調查,我發現,如果「n」爲3,編輯按鈕被按下時,方法tableView:editingStyleForRowAtIndexPath:
被稱爲共8次:
[super setEditing:flag animated:animated]
導致用於每個原始行0,1和2- 隨後
[tableView insertRowsAtIndexPaths:topIndexPath withRowAnimation:UITableViewRowAnimationBottom]
結果在5個呼喚行0,1,2,3,然後0再次
我可以理解編輯樣式需要重新更正爲插入一個新行的結果,但我不明白爲什麼在最後5次調用中,第0行設置了兩次,爲什麼第1行仍然設法擁有風格不正確。
有沒有人有任何見解?
當你說它是非標準的,在頂部插入一行時,你指的是哪個UI指南? iPhone人機界面指南? – 2009-10-08 12:05:32
是的。我將補充說,這是一個事實上的標準,將插入式編輯行(帶有綠色加號)作爲您允許添加的每個部分中的最後一行。 也就是說,除非你有很好的理由在別處插入。 – 2009-10-25 07:51:20
這是一種煩人的,必須隱藏最常用的功能,在可能長列表的底部。我想總能在編輯啓用時滾動到底部,但這可能會打開另一罐動畫蠕蟲。 – spstanley 2012-12-25 18:07:43