我的iOS应用中的导航问题。我有滑动菜单,菜单项的表格视图。点击其中一个项目激活segue,将新视图控制器推入堆栈。问题是我可以在同一个堆栈上将同一个视图控制器推送两次。如果我选择菜单项" A"然后在导航堆栈上推送相应的视图控制器。从这个新推的视图控制器我也可以选择相同的" A"菜单项和推送与最顶层视图控制器相同的新类别。我怎么能防止这种情况?
不工作的解决方案:
检查导航堆栈顶部控制器的类。但问题是我只知道segue的标识符(NSString *对象),无法获取有关目标视图控制器类的信息。我可以检查该类的唯一方法是:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
但我不能阻止从这种方法中执行segue。
我已经尝试将最后执行的segue保存在财产中,但它不会起作用,因为当我推动" A"查看控制器,然后" B"查看控制器,然后按下后退按钮我再也无法再次按B,这是错误的:)
答案 0 :(得分:2)
您需要以下方法
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
只返回false取消segue。你会有这样的东西(伪代码):
if ([performedSeguesArray contain:identifier])
{
return NO;
}
else
{
[performedSeguesArray addObject:identifier];
}
return YES;
答案 1 :(得分:1)
我有同样的问题。现在已经解决了。如果有帮助,请告诉我。
我已经有一个从表格视图单元格链接到名为DynamicSuperView
的另一个视图的seguefunc tableView(_tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
//Remove the below line from this function as it will perform segue.
//performSegue(withIdentifier: "DynamicSegue", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
// This will actually perform your segue
var DestViewController = segue.destination as! DynamicSuperView
let selectedRow = tableView.indexPathForSelectedRow?.row
DestViewController.labelText = names[selectedRow!]
}