0

私はにを持っていtableviewcellます、それをクリックすると、それは私がから都市を選ぶことができる場所RegisterViewControllerにプッシュします。でデリゲートを定義しました。しかし、delegateメソッドを実装すると、から都市を取得し、から選択しました。ログを確認すると、都市と選択したが表示されます。しかし、私が呼び出すと、セルはまだ古いタイトルラベルテキストを取得しました。コード:SelectCityViewControlleruipickerviewSelectCityViewControllerpickerviewindexpathdidSelectRowAtIndexPathRegisterViewControllerindexpathreloadRowsAtIndexPaths

SelectCityViewController.h

@protocol SelectCityDelegate <NSObject>

- (void)didGetCity:(City *)city;

@end

SelectCityViewController.m

- (void)finished:(UIBarButtonItem *)buttonItem
{
    if ([self.delegate respondsToSelector:@selector(didGetCity:)]) {
        [self.delegate didGetCity:self.city];
    }
    NSLog(@"%@", self.city.city);
    [self.navigationController popViewControllerAnimated:YES];
}

RegisterViewController.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == 2) {
        self.selectedIndexPath = indexPath;
        UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
        SelectCityViewController *signUp = [storyBoard instantiateViewControllerWithIdentifier:@"SignVC"];
        signUp.delegate = self;
        [self.navigationController pushViewController:signUp animated:YES];
    }
}

- (void)didGetCity:(City *)city
{
    NSLog(@"%@", city.city);
    NSLog(@"%@", selectedIndexPath);
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:selectedIndexPath];
    cell.textLabel.text = city.city;
    [self.tableView reloadRowsAtIndexPaths:@[selectedIndexPath] withRowAnimation:UITableViewRowAnimationFade];
}
4

2 に答える 2

1

問題は以下のコードにあると思います。ここで値を設定する必要はありません。リロードすると、セルを作成している関数にある値で値が上書きされるためです。

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:selectedIndexPath];
cell.textLabel.text = city.city;

セルをリロードして、上記のコードを

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

   //Cell intialization and other things

      cell.textLabel.text = city.city;
}
于 2013-03-26T06:32:26.933 に答える
1

didGetCityテーブルセル自体ではなく、テーブルをサポートするモデルを更新する必要があります。どのように答えnumberOfRowsInSection:ますか?いくつかの配列の数で?

インデックスのその配列selectedIndexPath.rowを変更する必要があります。 cellForRowAtIndexPath:同じデータでセルを初期化する必要があります。次に、didGetCityメソッドが配列を更新して再読み込みします。セルを参照するべきではありません。

于 2013-03-26T06:45:05.853 に答える