IOS: 使用 tableview,如何从 didSelectRowAtIndexPath 访问数据对象
IOS: With tableview, how to access data object from didSelectRowAtIndexPath
我有一个 Master-Detail table 视图,并希望根据所显示对象的属性将用户带到不同的 Detail VC。
例如,如果一个演员在电影中,我想去电影视图控制器,但如果演员在电视节目中,一个为电视节目优化的视图控制器。
我已将详细信息 VCs 连接到视图控制器,而不是 table 视图,以便使用 didSelectRowAtIndexPath,我可以使用逻辑将用户发送到不同的详细信息 VCs并执行 Segue。
但是,实现逻辑所需的信息在 cellforrowatindexpath 的数据对象中。所以我的问题是如何将此信息传递给 didSelectRow 或者将 segue 的逻辑放在 cellforrowatindexpath 中。
感谢您的任何建议。
这是我当前的代码:
- (void)tableView: (UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath {
UITableViewCell *theCellClicked = [self.tableView cellForRowAtIndexPath:indexPath];
NSString *segueName = nil;
if ([_credit.type isEqual: @"movie"]) {
segueName = @"goToMovie";
}
else if ([_credit.type isEqual: @"television"]) {
segueName = @"goToTVShow";
}
[self performSegueWithIdentifier: segueName sender: self];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
Credit *credit = [self.fetchedResultsController objectAtIndexPath:indexPath];
}
cell.textLabel.text = credit.name;
return cell;
}
您的抓取结果控制器仍将在 didSelectRowAtIndexPath
的范围内。所以你可以:
Credit *credit = [self.fetchedResultsController objectAtIndexPath:indexPath];
if ([credit.type isEqual: @"movie"]) {
segueName = @"goToMovie";
}
else if ([credit.type isEqual: @"television"]) {
segueName = @"goToTVShow";
}
我有一个 Master-Detail table 视图,并希望根据所显示对象的属性将用户带到不同的 Detail VC。
例如,如果一个演员在电影中,我想去电影视图控制器,但如果演员在电视节目中,一个为电视节目优化的视图控制器。
我已将详细信息 VCs 连接到视图控制器,而不是 table 视图,以便使用 didSelectRowAtIndexPath,我可以使用逻辑将用户发送到不同的详细信息 VCs并执行 Segue。
但是,实现逻辑所需的信息在 cellforrowatindexpath 的数据对象中。所以我的问题是如何将此信息传递给 didSelectRow 或者将 segue 的逻辑放在 cellforrowatindexpath 中。
感谢您的任何建议。
这是我当前的代码:
- (void)tableView: (UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath {
UITableViewCell *theCellClicked = [self.tableView cellForRowAtIndexPath:indexPath];
NSString *segueName = nil;
if ([_credit.type isEqual: @"movie"]) {
segueName = @"goToMovie";
}
else if ([_credit.type isEqual: @"television"]) {
segueName = @"goToTVShow";
}
[self performSegueWithIdentifier: segueName sender: self];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
Credit *credit = [self.fetchedResultsController objectAtIndexPath:indexPath];
}
cell.textLabel.text = credit.name;
return cell;
}
您的抓取结果控制器仍将在 didSelectRowAtIndexPath
的范围内。所以你可以:
Credit *credit = [self.fetchedResultsController objectAtIndexPath:indexPath];
if ([credit.type isEqual: @"movie"]) {
segueName = @"goToMovie";
}
else if ([credit.type isEqual: @"television"]) {
segueName = @"goToTVShow";
}