0

と を追加UITableViewUIButtonていUIScrollViewます。ボタンはテーブルビューの下に配置されます。

さて、テーブルから行を選択すると、その行にボタンが追加され、今まではすべて問題ありませんでしたが、その行を2回目にクリックすると、追加されたボタンが削除されますが、問題はそのボタンを削除するだけでなく、テーブルを上にスクロールし、テーブルの下にあるボタンをその場所に配置します。テーブルとボタンの間に隙間ができます。行がクリックされるたびにテーブルがリロードされます。UIButton下に追加するコードUITableView

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        mainTable.frame = CGRectMake(mainTable.frame.origin.x, mainTable.frame.origin.y,
                                      mainTable.frame.size.width,
                                      ([menuItemsArray count] * 60) + 380);

        [scrollView setContentSize:CGSizeMake(320,([menuItemsArray count] * 60) + 80 + 350)];

        reserverBtnBottom = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [reserverBtnBottom setFrame:CGRectMake(20.0f,mainTable.frame.size.height,280, 40)];
        [reserverBtnBottom addTarget:self action:@selector(reserveBtnAction) forControlEvents:UIControlEventTouchUpInside];

        [reserverBtnBottom setBackgroundImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
        [reserverBtnBottom setAlpha:1];
        [reserverBtnBottom setTitle:@"Reserve this table" forState:UIControlStateNormal];
        [reserverBtnBottom setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [scrollView addSubview:reserverBtnBottom];
rest thing goes here
}

私は何が欠けていますか?前もって感謝します。

4

2 に答える 2

0

heightForRowAtIndexPath単一の行の状態を変更しているため、このメソッドは新しい高さを計算するために一度呼び出される可能性があるため、このような計算には適していません。呼び出されたとき、セルにはまだ古い高さの値があり、テーブルもそうです。

ボタン位置の計算は、この例では scrollView であるlayoutSubviews:テーブルとボタンのスーパービューのメソッドに移動する必要があります。それが機能する方法は、サブビューのいずれかがフレームを変更すると、スーパービューがすべてのサブビュー フレームを再計算することです。

layoutSubviews:フレーム計算をオーバーライドする代わりに で処理さviewControllerれる場合があります。scrollView をオーバーライドしたくない場合は、フレーム計算のためのより良い場所を見つける必要がありますlayoutSubviews:

テーブルの下にボタンを追加するためにscrollViewのみが必要な場合は、私の経験から、スクロールビューを削除することをお勧めします(少なくとも、別のスクロールビューにスクロールビューがあるため、これは決して良い習慣ではありません)。テーブルフッタービューへのボタン。フッター ビューはテーブルの下に表示され、一緒にスクロールします。

于 2012-11-06T10:40:47.343 に答える
0

久しぶりに私は私の問題を解決します。viewWillAppear代わりにこのコードを入れてくださいheightForRowAtIndexPath-

mainTable.frame = CGRectMake(mainTable.frame.origin.x, mainTable.frame.origin.y,
                                      mainTable.frame.size.width,
                                      ([menuItemsArray count] * 60) + 380);

        [scrollView setContentSize:CGSizeMake(320,([menuItemsArray count] * 60) + 80 + 350)];

そして、reserveBtnBottom を UITableView のフッターに移動します。

A-Liveの大きな助けに感謝します。

于 2012-11-09T07:03:50.940 に答える