1. ホーム
  2. ios

[解決済み] テーブルビューの結果がない場合、画面に「No Results」と表示される

2022-08-24 23:34:43

質問

私は tableview で、リストアップする結果がない場合があります。 は、"no results"と表示されるものを設置したいと思います。 と表示したいのですが。

これを行うための最も簡単な方法はありますか?

私なら label の後ろに tableview の後ろに配置し、その結果に基づいてどちらかを隠すのですが、私が扱っているのは TableViewController であり、通常の ViewController というのは、スマートというか、やりやすいというか。

また、私は Parse としてサブクラス化し PFQueryTableViewController :

@interface TableViewController : PFQueryTableViewController

必要な追加情報を提供することができますので、お知らせください。

TableViewController ストーリーボードのシーン。

EDITです。 Midhun MPによると、私が使っているコードは以下の通りです。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    NSInteger numOfSections = 0;
    if ([self.stringArray count] > 0)
    {
        self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
        numOfSections                 = 1;
        //yourTableView.backgroundView   = nil;
        self.tableView.backgroundView = nil;
    }
    else
    {
        UILabel *noDataLabel         = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.tableView.bounds.size.width, self.tableView.bounds.size.height)];
        noDataLabel.text             = @"No data available";
        noDataLabel.textColor        = [UIColor blackColor];
        noDataLabel.textAlignment    = NSTextAlignmentCenter;
        //yourTableView.backgroundView = noDataLabel;
        //yourTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
        self.tableView.backgroundView = noDataLabel;
        self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    }

    return numOfSections;
}

そして、これが私が取得したViewですが、まだセパレータラインがあります。 これは何か小さな変更であるような気がしますが、なぜセパレータラインが表示されるのかがよくわかりません。

どのように解決するのですか?

を使えば、簡単に実現できます。 backgroundView プロパティに UITableView .

Objective Cです。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    NSInteger numOfSections = 0;
    if (youHaveData)
    {
        yourTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
        numOfSections                = 1;
        yourTableView.backgroundView = nil;
    }
    else
    {   
        UILabel *noDataLabel         = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, yourTableView.bounds.size.width, yourTableView.bounds.size.height)];
        noDataLabel.text             = @"No data available";
        noDataLabel.textColor        = [UIColor blackColor];
        noDataLabel.textAlignment    = NSTextAlignmentCenter;
        yourTableView.backgroundView = noDataLabel;
        yourTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    }

    return numOfSections;
}

Swiftです。

func numberOfSections(in tableView: UITableView) -> Int
{
    var numOfSections: Int = 0
    if youHaveData
    {
        tableView.separatorStyle = .singleLine
        numOfSections            = 1
        tableView.backgroundView = nil
    }
    else
    {
        let noDataLabel: UILabel  = UILabel(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: tableView.bounds.size.height))
        noDataLabel.text          = "No data available"
        noDataLabel.textColor     = UIColor.black
        noDataLabel.textAlignment = .center
        tableView.backgroundView  = noDataLabel
        tableView.separatorStyle  = .none
    }
    return numOfSections
}


参考 UITableView クラスのリファレンス

backgroundView プロパティ

テーブルビューの背景画像。

宣言文

スウィフト

var backgroundView: UIView?

Objective-C

@property(nonatomic, readwrite, retain) UIView *backgroundView

ディスカッション

テーブルビューの背景ビューは、テーブルビューのサイズに合わせて自動的にリサイズされます。 サイズに変更されます。このビューは、テーブルビューのサブビューとして、すべてのセルの背後に配置されます。 ビューのサブビューとして配置されます。

テーブルビューの背景色を設定するには、このプロパティをnilに設定する必要があります。 テーブル・ビューの背景色を設定するには、このプロパティをnilに設定する必要があります。