1

这里有一个非常简单的问题。我在一个视图上有一个标签,在前一个视图上有一个 UITableView。当用户选择该行并且我希望使用该行中的文本更新标签时,我触发了一个 segue。这是一个例子,代码很明显。

- (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;

在目标视图控制器中,并确保@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]];

viewDidLoad目标 VC 事件中,只需使用:

self.countryResult.text = countryChosen;

* 编辑 * 要处理具有多个部分的数据源,只需使用与cellForRowAtIndexPath.

ñSDictionary *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;

当你执行 segue 时,它​​总是会调用

- (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;

为此,您要在选择单元格后显示的视图控制器必须具有 UILabel 的属性,您尝试在该属性上设置文本。

于 2012-05-06T20:44:46.160 回答