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



所以我有一个ViewController与4个独立的按钮。当点击button1时,TableViewController1弹出一个项目列表。当选择一个项目时,TableViewController1下拉,button1现在有在表中被选中的文本。这一切都很好。但当我用TableViewController2对button2做同样的事情时来自button1的数据会被重置。

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

- (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标识符tableview有多个。h和。m文件。我用了一个完全错误的技术来让它工作吗?我希望我说的足够清楚,否则我可以上传图片。

编辑:我刚刚注意到,我也有一个滑块在我的ViewController。当点击一个按钮并在TableView中选择一行时,滑块被重置到原始位置。和上面的问题一样。

我认为你正在推到你的视图控制器的一个新实例,每次你从tableViewController。

假设你点击了ViewController0上的一个按钮,这会创建一个tableViewController1的实例。当你点击一行,你只是使用一个performSegue来创建一个ViewController0的NEW实例,它有自己的ViewDidLoad -重置按钮。

(你说视图"下拉",所以它是模态?)不要使用performSegue从tableViewController回到viewController,尝试使用[self dismissModalViewController: withCompletion:](或类似的,不记得了),然后你的tableViewController应该删除自己,并显示原来的viewController。

现在,你没有办法改变按钮的名字,但这可以通过访问tableView中的sender来完成,它会给你原始的视图控制器,而不是一个新的实例。

获取发送者的一种方法是使用来自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:@..];[dismissModalViewController..]

还有其他方法可以做到这一点,这取决于你如何从viewController推送到tableViewController。我相信有比这更简单的方法来访问发送者,但如果你已经在发送其他数据,它会很有用。

最新更新