2

編集ボタンを押すと、アイテムの左側に丸い削除アイコンが表示されます。セル内の削除アイコンを押すと、「回転」しますが、削除ボタンが表示されないため、押す削除ボタンがないため、commitEditingStyleが呼び出されません。

楽しみのために...セルを[挿入]に変更します。プラスアイコンが表示されます...それを押すと、commitEditingStyleが呼び出されます。

削除ボタンが表示されない理由がわかりません。

ポップオーバーに表示しているUIViewControllerがあります。私はUITableViewを追加しています...

audioTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 44, self.view.frame.size.width, 303)];
audioTable.delegate = self;
audioTable.dataSource = self;
[self.view addSubview:audioTable];

テキストを表示するために2つのラベルが含まれるカスタムセルを使用しています。

これがカスタムセルのinitWithFrameです...

primaryLabel = [[UILabel alloc]initWithFrame:CGRectMake(25 ,8, 275, 25)];
primaryLabel.font = [UIFont systemFontOfSize:14];

secondaryLabel = [[UILabel alloc]initWithFrame:CGRectMake(25 ,28, 275, 25)];
secondaryLabel.font = [UIFont systemFontOfSize:12];

[self.contentView addSubview:primaryLabel];
[self.contentView addSubview:secondaryLabel];

[self.contentView sendSubviewToBack:primaryLabel];
[self.contentView sendSubviewToBack:secondaryLabel];

編集呼び出しに接続されているViewControllerのツールバーに削除ボタンがあります。セルに削除記号が表示されているため、正常に呼び出される編集呼び出しで行っていることは次のとおりです...

if([self.audioTable isEditing]) {
    [button setTitle:@"Edit"];
    [super setEditing:NO animated:NO];
    [self.audioTable setEditing:NO animated:YES];
} else {
    [button setTitle:@"Done"];
    [super setEditing:YES animated:NO];
    [self.audioTable setEditing:YES animated:YES];
}

私は以下を実装しました...

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
     return UITableViewCellEditingStyleDelete;
}

-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    //i don't think i need to implement this really
    return YES;
}

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        //do delete stuff
    }
}

私が言ったように、すべてが正常に機能しています。ボタンを押すとすべてが機能します...削除ボタンはありません。

4

7 に答える 7

4

別のメカニズムを使用して回避する必要がありました。私はテストをしました、そして、私がそれを使ったとき、UITableViewControllerそれはうまくいきました。にを追加しUITableViewUIViewController、同じことを実装すると、UITableViewController機能しません。何を見逃したのかわかりませんが、を使用するUIViewControllerUITableViewController削除ボタンが表示されませんでした。

于 2012-08-24T14:27:33.180 に答える
4

私は同じ問題に遭遇しました。問題は、私のtableViewのフレームがポップオーバー内で適切にサイズ変更されていなかったことでした。実際には削除ボタンが表示されていましたが、ポップオーバーの境界外にあったため、表示されませんでした。

tableViewサイズを適切に変更することでこれを修正しました。私にとってこれは、tableViewを次のautoresizingMaskように設定することを意味しました。

self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

他の人がに切り替えることでこれを修正できた理由は、適切にサイズ変更されてUITableViewControllerいるためです。tableView

于 2013-04-24T14:51:52.510 に答える
2

を使用して修正したことは知っていますUITableViewControllerが、私の場合は修正できませんでした。

周りを見回すと、ここで答えが見つかりました。仕事を完了するには、さらに配管が必要です。幸いなことに、それはかなり簡単です。UIViewControllerあなたへの参照を含むにこれを追加しますUITableView

// objc
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
    [super setEditing:editing animated:animated];
    [tableView setEditing:editing animated:animated];
}

// swift
override func setEditing(editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)
    self.tableView.setEditing(editing, animated: animated)
}
于 2016-07-01T17:35:14.560 に答える
0

問題は、addSubview:を使用してラベルをセルのコンテンツビューに追加し、最後に追加されると、セルの他の部分が非表示になることです。次のように呼び出して、それらをバックグラウンドにプッシュします。

[cell.contentView sendSubviewToBack:label];
于 2012-08-14T17:11:08.180 に答える
0

削除ボタンのスタイルを設定することを忘れないでください

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleDelete;
}
于 2013-11-18T16:49:24.720 に答える
0

ボタンバーでを使用するときに同じ問題が発生しましUIViewController.editButtonItemた(これにより、View Controllerの編集プロパティが自動的に変更されます)。UITableViewでUIViewControllerを使用していたので、setEditingをテーブルビューに委任する必要がありました。

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)
    tableView.setEditing(editing, animated: animated)
}
于 2018-11-01T22:05:23.480 に答える
0

TVControllerではなくカスタムテーブルビューを使用している場合。少なくとも3人の代理人を設定する必要があります

Swift 4.2

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .insert {

    } else if editingStyle == .delete {

    }
}


func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
    return .delete
}

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    return true
}

そして最も重要なのは、viewDidloadに「tableView.isEditing=true」を追加することです:)

于 2019-05-14T23:35:08.687 に答える