在 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 无法滚动底部

在 tableView 上使用 CustomCell,如何调用 didSelectRowAtIndexPath?

didSelectRowAtIndexPath 不会在 ViewController 中触发