1

詳細ビューのナビゲーション バーの右側に上/下矢印のセグメント化されたコントロール ボタンを作成しました。テーブル ベースのアプリケーションで、これらの上下矢印を使用して親テーブルのセル間を移動するにはどうすればよいですか?

Apple の「NavBar」サンプル コードにこの例がありますが、コントロールは機能しません。

iBird プログラムにもこの機能があり、非常に優れています。「iBird 15」プログラムを無料でダウンロードしてください。

何かご意見は?

ありがとう!

4

2 に答える 2

1

私はそれをいくつかの小さな問題で動作させました。これが私の現在のコードです。あまりエレガントではありませんが、機能しています。segmentActionPressed は、次のビューに移動するためにセグメント コントロールが使用されたかどうかを指定するために使用する .h ファイルに設定された NSInteger です。

- (IBAction)segmentAction:(id)sender{
NSIndexPath *selectedRow = CurrentIndexPath; //CurrentIndexPath is an NSIndexPath object that holds the current indexpath.
NSIndexPath *scrollIndexPath;
self.segmentActionPressed = 1;
self.tableView.delegate = self;

if([sender selectedSegmentIndex] == 0)
{
[self.navigationController popViewControllerAnimated:NO];
    if(selectedRow.row == 0)    //If on the first row when up button is pressed, send us to the last row.
    {
        scrollIndexPath = [NSIndexPath indexPathForRow:tableDataSource.count -1 inSection:selectedRow.section];
        [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:tableDataSource.count -1 inSection:selectedRow.section] animated:NO scrollPosition:UITableViewScrollPositionMiddle];
        [self tableView:self.tableView didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:tableDataSource.count -1 inSection:selectedRow.section]];
    }
    if(selectedRow.row > 0)     //If on any other row when up button is pressed, go to the next row above.
    {
        scrollIndexPath = [NSIndexPath indexPathForRow:selectedRow.row -1 inSection:selectedRow.section];
        [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:scrollIndexPath.row inSection:selectedRow.section] animated:NO scrollPosition:UITableViewScrollPositionMiddle];
        [self tableView:self.tableView didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:scrollIndexPath.row inSection:selectedRow.section]];
    }
}
else if([sender selectedSegmentIndex] == 1)
{
[self.navigationController popViewControllerAnimated:NO];
    if(selectedRow.row == tableDataSource.count -1)     //If on the last row when up down is pressed, go to the first row.
    {
        scrollIndexPath = [NSIndexPath indexPathForRow:0 inSection:selectedRow.section];
        [self.tableView selectRowAtIndexPath:scrollIndexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle];
        [self tableView:self.tableView didSelectRowAtIndexPath:scrollIndexPath];
    }
    if(selectedRow.row < tableDataSource.count -1)      //If on any other row when up down is pressed, go to the next row below.
    {
        scrollIndexPath = [NSIndexPath indexPathForRow:selectedRow.row +1 inSection:selectedRow.section];
        [self.tableView selectRowAtIndexPath:scrollIndexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle];
        [self tableView:self.tableView didSelectRowAtIndexPath:scrollIndexPath];
    }
}}

私の -didSelectRowAtIndexPath メソッドでは、次のコードを使用して、上下矢印が使用されている場合にアニメーションなしで次のビューに移動しました。

if (segmentActionPressed == 0)
    {
    [self.navigationController pushViewController:tvc animated:YES];
    }
else if (segmentActionPressed == 1)
    {
    [self.navigationController pushViewController:tvc animated:NO];
    }

最後に、次のコードを設定して、親ビューが表示されたときに segmentActionPressed を「0」に設定します。また、ここで行の選択を解除して、親ビューに戻ったときにどの行が選択されたかを確認できるようにします。

- (void)viewWillAppear:(BOOL)animated {
self.segmentActionPressed = 0;
[self.tableView deselectRowAtIndexPath:CurrentIndexPath animated:YES];}

主な問題は、セグメント ボタンが押されたように見えず、「タッチアップ インサイド」アクションのようにボタンが離されたときではなく、タッチされるとすぐにアクションが送信されることです。

于 2009-08-04T16:02:03.417 に答える
0

これを行うには、セグメント化されたコントロールに関連付けられたアクションで selectRowAtIndexPath:animated:scrollPosition を呼び出す必要があります。

于 2009-07-24T22:32:36.790 に答える