0

1 つのセクションに XML データが取り込まれたグループ化されたテーブルビューがあります。私がやりたいことは、データ駆動型のセクションの前に別のセクションを作成し、それにアクションを適用することです。

例:

ユーザーには「現在地を使用する」というボタンが表示され (手動で作成されたセクション)、その下にはユーザーが代わりに選択できる国のリスト (データ駆動型セクション) が表示されます。

設定メニューをガイドとして使用してください。セクション内の単一の行であるいくつかのオプションがあるため、それらはボタンのように見えます...

これが意味をなさない場合は、より適切に説明しようとします。


だから私はこれらの2つの明らかなコード行を持っています...十分に単純です

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}    
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return [countrysData count];
    }

私が望むのは、numberOfSectionsInTableView2 を返し、最初の「セクション」に「クリックして現在の場所を使用する」と表示させ、地図を表示し、2 番目のセクションに現在作業している国のリストを表示することです。

4

3 に答える 3

1
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if(section == 0){
        return 1;
    }else{
        return [countrysData count];
    }
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 2;
}   

次に、indexPath.sectionがあるため、didSelectRowAtIndexPath:メソッドで何をするかを選択する必要があります。ああ、cellForRowAtIndexPath:メソッドのindexPath.sectionを確認する必要があります。

于 2009-11-17T16:11:11.263 に答える
1

新しいセクションとその行を適切に説明するために、UITableViewDataSourceプロトコルとUITableViewDelegateプロトコルのすべての実装を更新する必要があります。

たとえば、numberOfSectionsInTableView:、tableView:numberOfRowsInSection:、およびtableView:cellForRowAtIndexPath:を更新する方法は次のとおりです少なくともtableView :didSelectRowAtIndexPath:も更新する必要があります。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // calculate the number of sections of non-data (might just be 1)    
    // calculate the number of sections for the data (you were already doing this, might just be 1)
    // return the sum
    return 1 + 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSInteger rowCount = 0;
    switch (section) {
    case 0:
        // non-data section has 1 row/cell
        rowCount = 1;
        break;
    case 1:
        // data section uses an array
        rowCount = [dataArray count];
        break;
    }
    return rowCount;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *nonDataCellID = @"NonDataCell";
    static NSString *dataCellID = @"DataCell";
    UITableViewCell *cell;

    int section = [indexPath indexAtPosition:0];
    int row = [indexPath indexAtPosition:1];

    switch (section) {
        case 0:
            // or you can just use standard cells here
            cell = [tableView dequeueReusableCellWithIdentifier:nonDataCellID];
            if (cell == nil) {
                [[NSBundle mainBundle] loadNibNamed:@"NonDataCell" owner:self options:NULL];
                cell = nonDataCell; // nonDataCell is an IBOutlet to this custom cell
            }

            // configure non-data cell here (use tags)
            UILabel *someLabel = (UILabel*)[cell viewWithTag:1];
            someLabel.text = @"Non-data cell";
            break;

        case 1:
            // or you can just use standard cells here
            cell = [tableView dequeueReusableCellWithIdentifier:dataCellID];
            if (cell == nil) {
                [[NSBundle mainBundle] loadNibNamed:@"dataCell" owner:self options:NULL];
                cell = dataCell; // dataCell is an IBOutlet to this custom cell
            }

            // configure data call here (using "row")
            UILabel *someDataLabel = (UILabel*)[cell viewWithTag:1];
            someDataLabel.text = [[dataArray objectAtIndex:row] valueForKey:@"name"];
            break;
       }

    return cell;
}
于 2009-11-17T16:11:45.520 に答える
0

UITableViewDataSourceのメソッド'numberOfSectionsInTableView:'の戻り値をその場で変更できると確信しています。ユーザーが追加のセクションの選択肢を選択したら、フラグを設定して、メソッドが必要な数のテーブルを返すようにします。次に、テーブルのリロードを強制すると、新しいセクションが表示されます。

于 2009-11-17T16:12:52.470 に答える