每次用户点击任何单元格时都会使用此代码一次又一次地执行segue,我想知道如何在切换视图时跟踪加载的视图以保留数据,而不是无限的新viewcontroler。
谢谢 -
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == 0) {
[self.navigationController
performSegueWithIdentifier:@"rep" sender:self];
} else if (indexPath.row == 1) {
[self.navigationController
performSegueWithIdentifier:@"rep1" sender:self];
}
}
答案 0 :(得分:0)
维护对视图控制器的引用的另一种方法是在seque之前自定义视图控制器。
覆盖视图控制器方法:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
MyViewController *targetController = (MyViewController*)segue.destinationViewController;
targetController.customVar = 1;
}
此方法的默认实现不执行任何操作。当需要将相关数据传递给新视图控制器时,视图控制器会覆盖此方法。 segue对象描述了转换,并包含对segue中涉及的两个视图控制器的引用。
答案 1 :(得分:0)
除非您想要自定义,否则您不需要每次都为每一行都使用新的View控制器。这将在故事板上创建大量的视图控制器。
所以,只需命令将segue从控制器A拖到B.示例:如果A是tableViewController而B是简单的VC,你在那里显示表行的数据然后命令从整个tableViewController拖动到B.现在这将作为常见的segue只有一个标识符。
所以在你的代码中:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//Set your B's label/property etc to cell's data or anything so that it will reflect in B.
B.label = cell.text;
[self performSegueWithIdentifier:@"Identifier" sender:self];
}
希望这有帮助。
答案 2 :(得分:0)
首先尝试我的其他方法,但如果你真的需要维护一个指向新视图控制器的指针,你可以尝试这种方法。这应该执行一次segue,创建对视图控制器的引用,随后将其手动推入导航控制器。
覆盖视图控制器方法:
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender{
if(self.myViewController == nil){
return YES;
}else{
[self.navigationController pushViewController:self.myViewController animated:YES]
}
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
self.myViewController = (MyViewController*)segue.destinationViewController;
self.myViewController.customVar = 1; //perform initial customization
}
我知道什么,我从未使用过故事板......
答案 3 :(得分:-2)
我认为你可以保留新的viewController指针。然后下次你可以像这样使用它:
[self.navigationController pushViewController:thePointer animated:YES]
我很少使用Storyboard。所以我不确定它会起作用。