1

ここで本当に簡単な質問です。1 つのビューにラベルがあり、前のビューに UITableView があります。ユーザーが行を選択したときにセグエがトリガーされ、その行のテキストでラベルを更新したい。これは一例です。コードは非常に明白です。

- (void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

NSString *countrySelection;

switch (indexPath.section) {

    case kFirstSection:
        countrySelection = [[NSString alloc]
                            initWithFormat:@"The country you have chosen is %@",
                            [self.MyCountries objectAtIndex: indexPath.row]];
        [self performSegueWithIdentifier:@"doneResults" sender:self];
        self.countryResult.text = countrySelection;
break;

ラベルは更新されておらず、何をすべきかわかりません。

前もって感謝します!

4

2 に答える 2

1

これらの種類のものは、それらを所有するView Controllerで実際に設定する必要があります。次に示すように、パブリック プロパティを使用して、選択した国の値をそのビュー コントローラーに渡します。

まず、次のようなプロパティを作成します。

@property(non atomic,strong) NSString *countryChosen;

宛先View Controllerで、それを確認し@synthesizeてください

IndexPath の別のプロパティを作成する理由はありません。使うだけ

// Pass along the indexPath to the segue prepareForSegue method, since sender can be any object
[self performSegueWithIdentifier:@"doneResults" sender:indexPath]; 

didSelectRowAtIndexPath メソッドで。

次にprepareForSegueMethod

MyDestinationViewController *mdvc = segue.destinationViewController;
NSIndexPath *indexPath = (NSIndexPath *)sender;

mdvc.countryChosen = [self.MyCountries objectAtIndex: indexPath.row]];

宛先 VCのviewDidLoadイベントでは、次を使用します。

self.countryResult.text = countryChosen;

*編集* 複数のセクションを持つデータソースを処理するには、cellForRowAtIndexPath.

NSDictionary *selRow = [[self.countriesIndexArray valueForKey:[[[self.countriesIndexArray allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] objectAtIndex:indexPath.section]] objectAtIndex:sindexPath.row];

必要に応じてこれを変更しますが、基本的には、必要な indexPath (セクションと行の両方) を指定することを除いて、セルを表示するのと同じロジックを実装しています。

次に、次のようにして、宛先 VC でそのプロパティを設定します。

self.countryResult.text = [selRow valueForKey@"Country"];
于 2012-05-06T21:02:22.230 に答える
0

現在のビュー コントローラーで、次のように、ユーザーが選択したセルの indexPath の新しいプロパティを作成します。

@property(strong,nonatomic) NSIndexPath *path;

それを @synthesize してから、ユーザーが行を選択したときに、それを使用して設定します

self.path = indexPath;

セグエを実行すると、常に呼び出されます

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

したがって、 prepareForSegue: が呼び出されたときにできることは次のとおりです。

/* if this is not the only segue you are performing you want to check on the identifier first to make sure this is the correct segue */
NSString *countrySelection = [[NSString alloc]
                        initWithFormat:@"The country you have chosen is %@",
                        [self.MyCountries objectAtIndex: self.path.row]];

segue.destinationViewController.countryResult.text = countrySelection;

/* after creating the text, set the indexPath to nil again because you don't have to keep it around anymore */
self.path = nil;

これを機能させるには、セルを選択した後に表示するView Controllerに、テキストを設定しようとしているUILabelのプロパティが必要です。

于 2012-05-06T20:44:46.160 に答える