0

所以我得到了一个带有 4 个单独按钮的 ViewController。单击 button1 时,TableViewController1 会弹出带有项目列表的 ViewController。选择一个项目时,TableViewController1下降,并且按钮1现在具有在表中选择的文本。这一切都很好。但是,当我使用 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 中选择一行时,滑块将重置为原始位置。与上述相同的问题。

4

1 回答 1

0

我认为每次从 tableViewController 推送时,您都会推送到 View Controller 的新实例。

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

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

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

获取发送者的一种方法是[performSegue...从 ViewController0 中使用,在它自己的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。而且我确信有比这更简单的方法来访问发件人,但是如果您已经在发送其他数据,它会起作用并且很有用。

于 2013-05-15T14:41:23.023 回答