私の最初のアプリとして、私は簡単なナビゲーションベースのnumismaticコレクションアプリを習得しようとしています。
Plistには191のレコード、国の普通のリスト - > item 0 - String - Albania ... item 190 - String - Vanuatuがあります。
これらのレコードを私の一時的な配列に読み込んで、UITableViewに移入します。
NSString *countriesFile=[[NSBundle mainBundle]pathForResource:@"countries" ofType:@"plist"];
countries=[[NSArray alloc]initWithContentsOfFile:countriesFile];
このテーブルビューには、セクション→大陸があります。
まあ、私の問題は:
別のペン先に押すと、国の名前とヘッダーとラベルに表示します。それはそうですが、ヨーロッパ諸国のみです。私が他の大陸の国を叩くと、ヨーロッパの国がいくつか見えます。スクリーンショットを見てください。
ヨーロッパの国をタップ - >ベルギー、右が表示されます。
アフリカのセクションに移動する:
アンゴラのテーピングとオーストリアへ
従って、アンゴラの指数 - 92.オーストリア - 1.しかし、オーストリアとアンゴラはともに彼らのネイティブセクションで第2の細胞です。
どこに問題があり、何があろうか?
前もって感謝します。
回答:
回答№1は0私はあなたが使用していると仮定しています -(void)tableView: (UITableView*)tableView didSelectRowAtIndexPath: (NSIndexPath*)indexPath
あなたがリスト内のアイテムをクリックしたことを知らせるには? また、使用していますか [indexPath row]
(または indexPath.row
)あなたがタップした行のインデックスを把握するには?
どのような row
プロパティの戻り値は、現在のセクション。これは、テーブル全体の絶対行インデックスを返しません。このため、第1セクションのインデックス2項目または第2セクションのインデックス2項目をクリックするかどうかは関係ありませんが、 row
両方のケースで2を返します。
アイデアは.plistファイルを少し変更することです。 1つの長い配列を持つのではなく、大陸を表す親配列を持ちます。この大陸配列の各インデックスのオブジェクトには、そこにある国のリストを保持する別の配列があります。
-(void)tableView: (UITableView*)tableView didSelectRowAtIndexPath: (NSIndexPath*)indexPath
{
NSUInteger section=[indexPath section];
NSUInteger row=[indexPath row];
NSString* countryName=[[plistArray objectAtIndex: section] objectAtIndex: row];
//rest of code...
}
回答№2の場合は0
あなたが考慮していないように聞こえるindexPathのセクション値indexPathには、セクションと行の2つの部分があります。セクションが1つのテーブルでは、通常、行の値を読み取るだけです。あなたのケースでは、グループ化されたテーブルを持っているように見えるので、データの場所としてindexPath.srowとindexPath.rowの両方を読み取る必要があります。