所以我得到了一个带有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中选择行时,滑块将重置为原始位置。与上述类似的问题。
答案 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的方式。我确信有更简单的方法可以访问发件人,但是如果您已经发送了其他数据,它可以正常使用。