iOS / Xcode - 重置数据解析的多个segue标识符

时间:2013-05-15 14:25:22

标签: ios tableview segue

所以我得到了一个带有4个单独按钮的ViewController。单击button1时,TableViewController1会弹出带有项列表的ViewController。选择项目时,TableViewController1会下拉,button1现在具有在表格中选择的文本。这一切都很好。但是,当我使用TableViewController2对button2执行完全相同的操作时,button1中的数据将被重置。

我使用带有标识符的segues,一些代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"showEducation"]) {
        NSIndexPath *indexPath = [self.tableViewEducation indexPathForSelectedRow];
        ViewController *destViewController = segue.destinationViewController;
        destViewController.educationText = [tableViewArray objectAtIndex:indexPath.row];
    }
}

所以目前我为每个按钮提供了多个segue标识符,并为tableviews提供了多个.h和.m文件。我是否使用完全错误的技术来实现这一目标?我希望我足够清楚,否则我可以上传图片。

编辑:我刚注意到,我的ViewController上也有一个滑块。单击按钮并在TableView中选择行时,滑块将重置为原始位置。与上述类似的问题。

1 个答案:

答案 0 :(得分:0)

我想你每次从tableViewController推送时都会推送到View Controller的新实例。

想象一下,您单击ViewController0上的一个按钮,这将创建一个tableViewController1的实例。当你单击一行时,你只是使用performSegue创建一个ViewController0的新实例,它有自己的ViewDidLoad - 重置按钮。

(你说视图“下降”,所以这是模态?) 不要使用tableViewController中的performSegue回到viewController,尝试使用[self dismissModalViewController: withCompletion:](或类似的东西,不记得了),然后你的tableViewController应该删除自己并显示原始的ViewController。

现在,您无法更改按钮的名称,但是可以通过从tableView访问sender来完成,这将为您提供原始的View Controller,而不是新的实例。

获取发件人的一种方法是使用ViewController0中的[performSegue...,并在其自己的prepareForSegue中,您可以执行类似

的操作
//In the first ViewController, not in the TableViewControllers
-(void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender{
    if(sender == button1)
    {
        UITableViewController1 *dest = segue.destinationViewController;
        [dest setSender: self];
    }
}

在TableViewController1中,您将创建一个变量ViewController *home;和一个方法-(void)setSender:(ViewController*)sender;,以便在didSelectRowAtIndexPath中,您现在可以说[[(ViewController0*)home button1]setTitle:@..];,然后{ {1}}

还有其他方法可以执行此操作,具体取决于您从viewController推送到tableViewController的方式。我确信有更简单的方法可以访问发件人,但是如果您已经发送了其他数据,它可以正常使用。