0

UITableView を表示するアプリケーションでビューを作成しました。ほとんどの場合、(明らかに) 結果でいっぱいになりますが、結果がない場合は、テーブルにデータを入力する方法をユーザーに通知する別のビューを表示したいと考えています。

interfacebuilder でそのビューを設計したいと考えています。2 つの異なるペン先を切り替えるには、データソースが空かどうかをコードで確認する必要があります。Interfacebuilder で作成されたビューをインスタンス化して構成するにはどうすればよいですか?

4

3 に答える 3

0

これを行う簡単な方法は、通常どおりxibにビューを追加して表示することです。両方のビュー、テーブルビューと他のビューを設計し、tableViewにたとえば111のタグを付け、otherviewに別のタグ222を付けます。

viewDidLoad

両方のビューを取得

UIView *noDataView = [self.view viewWithTag:222];
UITableView *tableView = [self.view viewWithTag:111];
//Hide both of them or only the noDataView until you know if you have data from the dataSource or not

データソースを確認してください

//hasElements do you have any element to show?
if(hasElements)
{
    noDatView.hidden = YES;
    tableView.hidden = NO;
}
else
{
    noDatView.hidden = NO;
    tableView.hidden = YES;
}
于 2012-06-18T07:51:07.723 に答える
0

条件に基づいてnibファイルをロードできます。次のようにカテゴリを記述できます。

self.view = (UIView *)[self loadNib:@"SecondView" inPlaceholder:self.view];

- (UIView *)viewFromNib:(NSString *)nibName
{
    NSArray *xib = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil]; 
    for (id view in xib) { // have to iterate; index varies
        if ([view isKindOfClass:[UIView class]]) return view;
    }
    return nil;
}

- (UIView *)loadNib:(NSString *)nibName inPlaceholder:(UIView *)placeholder
{
    UIView *nibView = [self viewFromNib:nibName];
    [nibView setFrame:placeholder.frame];
    self.view = nibView;
    //[self.view insertSubview:nibView aboveSubview:placeholder];
    //[placeholder removeFromSuperview];
    return nibView;
}
于 2012-06-18T07:53:06.223 に答える
0

他の回答は可能な技術的解決策を提供しますが、標準のAppleデザインガイドラインを使用している場合は、おそらく心配する必要さえないことを提案します. たとえば、画面のどこかに「追加」という識別子 (プラス アイコンが表示されます) を持つバー ボタン項目があるはずです。次に、アイテムを追加する方法の長い (多くの場合、ローカライズが不十分な) 説明を提供するのではなく、テーブルのアイテムに適した複数形の名詞でアイテムを置き換える「アイテムなし」という空のセクションのヘッダーを用意します。たとえば、私が取り組んでいるアーチェリー関連のアプリの場合:

明らかなバー ボタン アイテムを含む空のテーブル ビュー

[編集] ボタンも現在無効になっていることに注意してください。この時点でできることは [追加] ボタンをタップすることだけなので、説明は不要です (Appstore のスクリーンショットは、この時点で何が表示されるかを示しています)。

于 2012-06-18T08:04:20.417 に答える