4

以前UITableviewcellEditingstyleDeleteは、ユーザーがクリックして削除ボタンを表示するためのボタンを表示していました(ユーザーが編集をクリックしてからボタンをクリックして削除ボタンを表示すると、メールアプリで表示されるのと同じ方法です)。ios6では問題なく動作しますが、ios 7を搭載したデバイスでアプリをビルドすると、削除ボタンが消えますが、削除ボタンの領域をタップすると削除できます。問題は、ユーザーが削除ボタン (OS によって提供される赤色のボタン) が表示されないことです。私のコードは次のとおりです。

- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Detemine if it's in editing mode
    if (self.editing)
    {
       return UITableViewCellEditingStyleDelete;
    }

   return UITableViewCellEditingStyleNone;
}

解決策を見つけるのを手伝ってください、私はiOS7環境についてあまり知りません.Thanks!

4

6 に答える 6

2

のバグの 1 つに似ていますiOS 7。何らかの理由で、削除ボタンの上にbackgroundView移動されます。次のように派生ビューの関数をiOSサブクラス化しbackgroundView、実装することで、これを回避できます。setFrame

UITableViewCell の削除ボタンが隠されます。


accesoryViewが指定され、 が である場合にも発生する可能性がありeditingAccessoryViewますnil。この問題と解決策の詳細な説明は次のとおりです。

iOS7 で編集モードにすると、UITableViewCell の内容が削除ボタンと重なる。

于 2013-10-01T13:23:54.163 に答える
1

tableView が編集されているかどうかを確認する必要はありません...実装するだけです:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
       return UITableViewCellEditingStyleDelete;
}
于 2013-10-01T13:21:36.590 に答える
0

より簡単な回避策

上記の Vin の投稿にリンクされている手法と同様の手法を使用する iOS7 専用アプリを想定すると、 https ://stackoverflow.com/a/19416870/535054 のアプローチがよりクリーンになると思います。

このアプローチでは、backgroundView をサブクラス化する必要はありません。これは、セルごとに異なる可能性があります。

上記にリンクした回答のコードを、カスタム テーブル セル階層のルートに配置し、すべてのテーブル セル (それから継承) を配置すると、backgroundView または selectedBackgroundView プロパティを使用するたびに修正が適用されます。

この要点からソリューションをコピーします: https://gist.github.com/idStar/7018104

于 2013-10-17T01:56:58.727 に答える
0

この問題を解決する最善の方法は、セルに画像を追加し、裏面に設定することです。

      UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bgImg.png"]];
      imageView.frame = CGRectMake(0, 0, 320, yourCustomCell.frame.size.height);
      [yourCustomCell addSubview:imageView];
      [yourCustomCell sendSubviewToBack:imageView];

テキストが削除ボタンと重なる場合は、Autolayout を実装してください。それはより良い方法でそれを管理します。

cellSelectionStyle がデフォルトの色で強調表示されるもう 1 つのケースを生成できます。次のようにハイライト色を設定できます

      yourCustomCell.selectionStyle = UITableViewCellSelectionStyleNone;

 Set your table cell's selection style to UITableViewCellSelectionStyleNone. This will remove the blue background highlighting or other. Then, to make the text label or contentview highlighting work the way you want, use this method in yourCustomCell.m class.

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
    if (highlighted)
        self.contentView.backgroundColor = [UIColor greenColor];
     else
        self.contentView.backgroundColor = [UIColor clearColor];
}

ご理解いただけると幸いです。

于 2013-10-03T13:44:41.277 に答える