詳細ビューのナビゲーション バーの右側に上/下矢印のセグメント化されたコントロール ボタンを作成しました。テーブル ベースのアプリケーションで、これらの上下矢印を使用して親テーブルのセル間を移動するにはどうすればよいですか?
Apple の「NavBar」サンプル コードにこの例がありますが、コントロールは機能しません。
iBird プログラムにもこの機能があり、非常に優れています。「iBird 15」プログラムを無料でダウンロードしてください。
何かご意見は?
ありがとう!
詳細ビューのナビゲーション バーの右側に上/下矢印のセグメント化されたコントロール ボタンを作成しました。テーブル ベースのアプリケーションで、これらの上下矢印を使用して親テーブルのセル間を移動するにはどうすればよいですか?
Apple の「NavBar」サンプル コードにこの例がありますが、コントロールは機能しません。
iBird プログラムにもこの機能があり、非常に優れています。「iBird 15」プログラムを無料でダウンロードしてください。
何かご意見は?
ありがとう!
私はそれをいくつかの小さな問題で動作させました。これが私の現在のコードです。あまりエレガントではありませんが、機能しています。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];}
主な問題は、セグメント ボタンが押されたように見えず、「タッチアップ インサイド」アクションのようにボタンが離されたときではなく、タッチされるとすぐにアクションが送信されることです。
これを行うには、セグメント化されたコントロールに関連付けられたアクションで selectRowAtIndexPath:animated:scrollPosition を呼び出す必要があります。