iPhone:グループ化されたテーブルとナビゲーションコントローラーの問題
-
03-10-2019 - |
質問
アプリにグループ化されたテーブルをセットアップしましたが、新しいビューにプッシュすると正常に機能します。 1つを除いて。タイトルとスタックレイアウトはすべて奇妙です。これが内訳です:
- テーブルには2つのセクションがあります。
- 最初のセクションの最初の行をタップすると、正しいビューになりますが、新しいビューのタイトルは、テーブルの2番目のセクションの最初の行の名前です。
- 次に、最初のセクションのタイトルの2行目は、2番目のセクションのタイトルの2行目です。
ルートビューテーブルの2番目のセクションの2番目の行をタップすると、ナビゲーションボタンは次の2行目になります。 最初 テーブルのセクション。
だからここに私のテーブルの図があります:
表1セクション1
行1
行2
行3
表2セクション2
行a
行b
行c
したがって、行3をタップすると、プッシュビューのタイトルは行Cです。ナビゲーションボタンは行3に戻るように指示し、最終的にルートビューで終了します。
ビューをプッシュする実装ファイルは次のとおりです。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//CSS
if ([[arryClientSide objectAtIndex:indexPath.row] isEqual:@"CSS"])
{
CSSViewController *css = [[CSSViewController alloc] initWithNibName:@"CSSViewController" bundle:nil];
[css setTitle:@"CSS"];
[self.navigationController pushViewController:css animated:YES];
}
//HTML
if ([[arryClientSide objectAtIndex:indexPath.row] isEqual:@"HTML"])
{
HTMLViewController *html = [[HTMLViewController alloc] initWithNibName:@"HTMLViewController" bundle:nil];
[html setTitle:@"HTML"];
[self.navigationController pushViewController:html animated:YES];
}
//JS
if ([[arryClientSide objectAtIndex:indexPath.row] isEqual:@"JavaScript"])
{
JSViewController *js = [[JSViewController alloc] initWithNibName:@"JSViewController" bundle:nil];
[js setTitle:@"JavaScript"];
[self.navigationController pushViewController:js animated:YES];
}
//PHP
if ([[arryServerSide objectAtIndex:indexPath.row] isEqual:@"PHP"])
{
PHPViewController *php = [[PHPViewController alloc] initWithNibName:@"PHPViewController" bundle:nil];
[php setTitle:@"PHP"];
[self.navigationController pushViewController:php animated:YES];
}
//SQL
if ([[arryServerSide objectAtIndex:indexPath.row] isEqual:@"SQL"])
{
SQLViewController *sql = [[SQLViewController alloc] initWithNibName:@"SQLViewController" bundle:nil];
[sql setTitle:@"SQL"];
[self.navigationController pushViewController:sql animated:YES];
}
&テーブルのデータにフィードする配列:
- (void)viewDidLoad {
[super viewDidLoad];
arryClientSide = [[NSArray alloc] initWithObjects:@"CSS",@"HTML",@"JavaScript",nil];
arryServerSide = [[NSArray alloc] initWithObjects:@"Objective-C", @"PHP",@"SQL",nil];
// arryResources = [[NSArray alloc] initWithObjects:@"HTML Colour Codes", @"Useful Resources", @"About",nil];
self.title = @"Select a Language";
[super viewDidLoad];
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
どんな助けにもなります 大いに 感謝。
ジャック
解決
ユーザーがタップしたセクションを決定するためのIFステートメントが欠落していると思います。 Nsindexpathには行とセクションプロパティの両方があることを忘れないでください。私は通常、このようなことをします:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if ( indexPath.section == 0 ) {
// Do something with arryClientSide
}
if ( indexPath.section == 1 ) {
// Do something with arryServerSide
}
グループ化されたテーブルを使用していると思います。
乾杯、-dan
他のヒント
ダンは正しいです、あなたはindexpath.section変数を使用する必要があります。コードのように見えますが、「行1」をクリックした後、次のことが発生します。
ISEQUAL:@"CSS"はtrueを返します、
CSSビューコントローラーを押して、
次に、ドロップダウンしてチェックを続けます(if .. isequal:@"html")..(if .. isequal:@"javascript")
確かに(if .. isequal:@"Php")Trueを返し、PHPビューコントローラーをプッシュします。
私はあなたのアプリケーション全体を知っていませんが、ここで私が気づいている1つの観察(メモリリークを除く)は、各言語に専念するビューコントローラー/ペン先を持っていることです。ビューコントローラーが非常に異なる動作/外観を持っている場合、それがあなたのことだと思いますやらなければなりませんが、それぞれの類似性を確認し、単一の「LanguageViewController」を作成できないかどうかを確認することをお勧めします。それに基づいて。これは適用されないかもしれませんが、もしそうならそれはあなたに多くの仕事を節約するでしょう!