在 didSelectRowAtIndexPath 之后 prepareForSegue?
Posted
技术标签:
【中文标题】在 didSelectRowAtIndexPath 之后 prepareForSegue?【英文标题】:prepareForSegue after didSelectRowAtIndexPath? 【发布时间】:2014-06-09 20:14:40 【问题描述】:我们可以在 didSelectRowAtIndexPath 之后进行类似 prepareForSegue 的排名吗?
我的 NSLog 发送了一个好句子,这个 NSLog 是我想要的(在 didSelectRowAtIndexPath 中,但在 prepareForSegue 中分配给我的 NSLog 之后)我希望 prepareForSegue 中的 NSLog 发送与 didSelectRowAtIndexPath 相同的句子。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
self.cellSelected = cell.textLabel.text;
NSLog(@"la : %@", self.cellSelected);
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue.identifier isEqualToString:@"showPhotoView"])
NSLog(@"ou %@", self.cellSelected);
PhotoViewController *viewController = (PhotoViewController *)segue.destinationViewController;
viewController.cellSelected = self.cellSelected;
【问题讨论】:
有什么问题? @MatthiasBauch 问题是我不能传递“cell.textLabel.text;”的值的 didSelectRowAtIndexPath 因为在更改视图后传递给 cellSelected...:/ 我明白了,问题是prepareForSegue:sender:
在tableView:didSelectRowAtIndexPath:
之前被调用
【参考方案1】:
如果您使用源自 UITableViewCell 的 segue,sender
参数实际上将包含所选的 UITableViewCell。所以你可以只使用 sender 参数来获取你需要的数据。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue.identifier isEqualToString:@"showPhotoView"])
UITableViewCell *cell = sender;
PhotoViewController *viewController = (PhotoViewController *)segue.destinationViewController;
viewController.cellSelected = cell;
【讨论】:
【参考方案2】:是的,你可以!你只需要解决一些问题
这是我使用的一个例子
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
[self performSegueWithIdentifier:@"friends2" sender:self];
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([[segue identifier] isEqualToString:@"friends2"])
NSString * object = nil;
NSIndexPath *indexPath2 = nil;
if (self.searchDisplayController.isActive)
indexPath2 = [[ self.searchDisplayController searchResultsTableView]indexPathForSelectedRow];
object = self.results[indexPath2.row];
NSLog(@"is active : %@", object.self);
else
indexPath2 = [self.tableView indexPathForSelectedRow];
object = sortedArray.self[indexPath2.row];
NSLog(@"is not active : %@", object.self);
用 didSelect.. 我刚刚做了 segue,用 performSegue 你做你想做的事
【讨论】:
没错!但是现在我遇到了另一个问题:嵌套推送动画会导致导航栏损坏。在意外状态下完成导航转换。导航栏子视图树可能已损坏。以上是关于在 didSelectRowAtIndexPath 之后 prepareForSegue?的主要内容,如果未能解决你的问题,请参考以下文章
tableView - didSelectRowAtIndexPath 未调用
在 didSelectRowAtIndexPath 中呈现缓慢的 ViewController
我可以麻烦UITableViewDelegate的didSelectRowAtIndexPath:吗?
在 didselectRowAtIndexPath 之后 UITableView 无法滚动底部