web-dev-qa-db-ja.com

UITableViewにフッターを追加する方法は?

このコードを使用して、TableViewにフッターを追加しています。 20個のセクションがあり、各セクションには数行あります。 titleForHeaderInSectionおよびsectionForSectionIndexTitleメソッドがあります。

CGRect footerRect = CGRectMake(0, 0, 320, 40);
UILabel *tableFooter = [[UILabel alloc] initWithFrame:footerRect];
tableFooter.textColor = [UIColor blueColor];
tableFooter.backgroundColor = [self.theTable backgroundColor];
tableFooter.opaque = YES;
tableFooter.font = [UIFont boldSystemFontOfSize:15];
tableFooter.text = @"test";
self.theTable.tableFooterView = tableFooter;
[tableFooter release];

何が間違っていますか?

おかげで、

RL

53
Rui Lopes

UITableViewDelegateメソッドを実装する必要があります

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section

テーブルの適切なセクションの目的のビュー(フッターに必要なテキストを含むUILabelなど)を返します。

36
Erik

私のコードで具体的に見ているのは

self.theTable.tableFooterView = tableFooter;

作品と

[self.theTable.tableFooterView addSubview:tableFooter];

動作しません。だから前者に固執し、可能なバグを他の場所で探してください。 HTH

36
kris

私はそれを使用し、それは完璧に働いた:)

    UIView* footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)];
    [footerView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"ProductCellBackground.png"]]];
    self.tableView.tableFooterView = footerView;
    [self.tableView setSeparatorStyle:(UITableViewCellSeparatorStyleNone)];
    [self.tableView setContentInset:(UIEdgeInsetsMake(0, 0, -500, 0))];
18
pawelini1

最初は、この方法を試していました。

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section

しかし、これを以下と一緒に使用した後:

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section

問題は解決しました。サンプルプログラム

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 30.0f;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UIView *sampleView = [[UIView alloc] init];
    sampleView.frame = CGRectMake(SCREEN_WIDTH/2, 5, 60, 4);
    sampleView.backgroundColor = [UIColor blackColor];
    return sampleView;
}

uITableViewDelegateプロトコルを含めます。

@interface TestViewController : UIViewController <UITableViewDelegate>
6
Subham93

これはかなり古い質問であることは知っていますが、同じ問題に出会ったばかりです。正確な理由はわかりませんが、tableFooterViewはUIViewのインスタンス(「種類」ではなく「メンバー」)にしかなれないようです...だから、私の場合、新しいUIViewオブジェクト(wrapperViewなど)を作成しましたカスタムサブビューを追加します...あなたの場合、次からコードを変更してください:

CGRect footerRect = CGRectMake(0, 0, 320, 40);
UILabel *tableFooter = [[UILabel alloc] initWithFrame:footerRect];
tableFooter.textColor = [UIColor blueColor];
tableFooter.backgroundColor = [self.theTable backgroundColor];
tableFooter.opaque = YES;
tableFooter.font = [UIFont boldSystemFontOfSize:15];
tableFooter.text = @"test";
self.theTable.tableFooterView = tableFooter;
[tableFooter release];

に:

CGRect footerRect = CGRectMake(0, 0, 320, 40);
UIView *wrapperView = [[UIView alloc] initWithFrame:footerRect];

UILabel *tableFooter = [[UILabel alloc] initWithFrame:footerRect];
tableFooter.textColor = [UIColor blueColor];
tableFooter.backgroundColor = [self.theTable backgroundColor];
tableFooter.opaque = YES;
tableFooter.font = [UIFont boldSystemFontOfSize:15];
tableFooter.text = @"test";

[wrapperView addSubview:tableFooter];

self.theTable.tableFooterView = wrapperView;
[wrapperView release];
[tableFooter release];

それが役に立てば幸い。わたしにはできる。

6
zioolek

これらのサンプルはうまく機能します。セクションを確認してから、セクションを表示または非表示にする高さを返すことができます。 UITableViewDelegateからViewControllerを拡張することを忘れないでください。

Objective-C

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    if (section == 0)
    {
        // to hide footer for section 0 
        return 0.0;
    }
    else
    {
        // show footer for every section except section 0 
        return HEIGHT_YOU_WANT;
    }
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UIView *footerView = [[UIView alloc] init];
    footerView.backgroundColor = [UIColor blackColor];
    return footerView;
}

スイフト

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    let footerView = UIView()
    footerView.backgroundColor = UIColor.black
    return footerView
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    if section == 0 {
        // to hide footer for section 0
        return 0.0
    } else {
        // show footer for every section except section 0
        return HEIGHT_YOU_WANT
    }
}
3
abdullahselek

Swift 2.1.1以下が機能します:

func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        let v = UIView()
        v.backgroundColor = UIColor.RGB(53, 60, 62)
        return v
    }

    func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return 80
    }

self.theTable.tableFooterView = tableFooterを使用する場合、最後の行とtableFooterViewの間にスペースがあります。

3
William Hu
[self.tableView setTableFooterView:footerView];
2
user3693546

私は同じ問題を抱えていましたが、ヘッダーの次の行を置き換えました:

@interface MyController : UIViewTableViewController <UITableViewDelegate, UITableViewDataSource>

この行で、期待どおりに動作します:

@interface RequestViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

UIViewControllerに注目してください。幸運を :)

1
PowerAktar

の代わりに

self.theTable.tableFooterView = tableFooter;

試してみる

[self.theTable.tableFooterView addSubview:tableFooter];
1
amattn

スティッキーボトムエフェクトを好まない場合は、viewDidLoad()に入れます https://stackoverflow.com/a/38176479/412767

0
spaceMonkey