2012-10-11 64 views
3

我有一個UITableView,我想以與聯繫人應用程序類似的方式工作,有一個編輯按鈕,單擊時將單元格轉換爲編輯單元格。UITableView需要看起來像聯繫人與編輯的位置字段

目前,它們是使用單元格樣式'left detail'設置的,我已經覆蓋了setEditing方法,可以實現,但我不知道如何轉換單元格。

這裏的一些其他答案包括:「監視表視圖的編輯屬性是否發生變化(當按下Edit按鈕時)。然後將代碼添加到委託方法中,以便以不同方式組合,繪製和縮進單元格視圖處於編輯模式。「這正是我想要的,但不知道該怎麼做。

- (void)setEditing:(BOOL)flag animated:(BOOL)animated 
{ 
    [super setEditing:flag animated:NO]; 
    if (flag == YES){ 
     // Change views to edit mode. 
     self.textField = [[UITextField alloc] initWithFrame:[_titleLabel frame]]; 
     [self.textField setText:_titleLabel.text]; 
     [self.view addSubview:self.textField];   
    } 
    else { 
     // Save the changes if needed and change the views to noneditable. 
     [_titleLabel setText:self.textField.text]; 
     [self.textField removeFromSuperview]; 
    } 
} 

在我的方法我已經從another question該工程..之類的(它使在錯誤的地方飛新的可編輯文本字段,並不會隱藏標籤)採取代碼。 Before edit During edit After edit

apple guidelines是不夠具體,我明白如何發展的意見。

+0

什麼ü希望...你能否清楚地告訴你的問題...對不起,我沒有得到你... – IronManGill

+0

我正在尋找複製聯繫人應用程序視圖,因此當用戶單擊編輯時,視圖中的字段會更新爲可編輯的視圖。謝謝 –

+0

所以你有編輯tableviewcells的問題? – IronManGill

回答

0

我有一種變通方法。

如果我創建一個自定義行並使其看起來與'left detail'風格相同,但是在右側使用textview而不是標籤,則可以更改「seteditable」和「setenabled」字段視圖,以便在編輯時允許編輯。我點擊了字體顏色,以便在單擊編輯時發生變化,以便用戶可以看到它現在可以編輯。

這似乎很雜亂 - 所以我仍然在尋找最好的方法來做到這一點。

- (void)setEditing:(BOOL)flag animated:(BOOL)animated 
{ 
    [super setEditing:flag animated:NO]; 
    if (flag == YES){   
     [self.tableView setEditing:YES animated:NO]; 
     [self.sampleLabel setEnabled:YES]; 
     [self.sampleLabel setTextColor:[UIColor blackColor]]; 
    } 
    else { 
     [self.sampleLabel setEnabled:NO]; 
     [self.sampleLabel setTextColor:[UIColor darkGrayColor]]; 
    } 
} 

- (void)configureView 
{ 
    self.titleLabel.text = [[self.detailItem valueForKey:@"title"] description]; 
    self.ticketNumberLabel.text = [[self.detailItem valueForKey:@"reference"] description]; 
    self.detailsLabel .text = [[self.detailItem valueForKey:@"details"] description]; 
    self.sampleLabel.text = [[self.detailItem valueForKey:@"reference"] description]; 

    // initially set labels to not be editable 
    [self.detailsLabel setEditable:NO]; 
    [self.sampleLabel setEnabled:NO]; 

} 

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Return NO if you do not want the specified item to be editable. 
    // item can't be deleted now 
    return NO; 
} 

one two three

0

簡而言之,它的工作方式是在整個UITableView上設置編輯標誌,然後實現幾個在UITableViewDataSource協議中聲明的確定正在編輯哪些單元格的方法(canEditRowAtIndexPath,commitEditingStyle)。

所以首先您需要將UITableVIew置於編輯模式。你想要做的是,在處理您的工具欄按鈕:

[self.tableView setIsEditing:YES animated:NO];

然後,tableview中會調用canEditRowAtIndexPath,以確定是否該行可以編輯:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 

最後,當用戶做編輯,調用此方法:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDataSource_Protocol/Reference/Reference.html

這裏有一個例子:

http://www.behindtechlines.com/2012/06/02/enabling-configuring-uitableview-edit-mode/

+0

謝謝 - 這可以很好地刪除項目,但我不希望這是一個選項,我只是想改變項目的文本,例如門票的標題 –