3

クリックするとセルが編集セルに変換される編集ボタンがあるという点で、連絡先アプリと同様の方法で作業したい UITableView があります。

現時点では、セル スタイル「左の詳細」を使用して設定されており、実装の準備ができている setEditing メソッドをオーバーライドしましたが、セルを変換する方法がわかりません。

ここでの他の回答には、「テーブル ビューの編集プロパティが変更されたとき ([編集] ボタンが押されたとき) を監視します。次に、デリゲート メソッドにコードを追加して、テーブル ビューが編集中のときに別の方法でセルを作成、描画、およびインデントします。モード。" これはまさに私が欲しいものですが、方法がわかりません。

- (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];
    }
}

私の方法では、動作する別の質問から取得したコードがあります..(新しい編集可能なテキストフィールドをその場で間違った場所に作成し、ラベルを非表示にしません)。 編集前 編集中 編集後

Appleのガイドラインは、ビューを作成する方法を理解するには具体的ではありません。

4

2 に答える 2

0

簡単に言うと、これが機能する方法は、全体に編集フラグを設定してから、編集されているセルを決定するプロトコルでUITableView宣言されたいくつかのメソッド(canEditRowAtIndexPath、commitEditingStyle)を実装することです。UITableViewDataSource

したがって、最初にUITableVIewを編集モードにする必要があります。ツールバーボタンのハンドラーでこれを実行します。

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

次に、テーブルビューが呼び出さ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/

于 2012-10-11T13:02:59.180 に答える
0

回避策があります。

カスタム行を作成して「左側の詳細」スタイルと同じように見えるようにしますが、ラベルの代わりに右側のテキストビューを使用すると、ビューの「seteditable」および「setenabled」フィールドを変更できます。 edit 編集を許可します。編集をクリックするとフォントの色が変わるので、ユーザーは編集可能になったことを確認できます。

これは非常に厄介なようです - だから私はまだこれを行うための最良の方法を探しています.

- (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;
}

1 2 三

于 2012-10-11T13:54:54.917 に答える