【发布时间】:2014-09-11 13:42:21
【问题描述】:
我有一个 tableview 控制器,我想覆盖最后一行的 segue。我不想去标准的目标视图控制器,而是想把它发送到另一个控制器。我该怎么做?
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSIndexPath *myIndexPath = [self.tableView
indexPathForSelectedRow];
long row = [myIndexPath row];
if ([[segue identifier] isEqualToString:@"ShowLocationsTableView"])
{
LocationsTableViewController *ViewController =
[segue destinationViewController];
ViewController.categoryDetailModel = @[_categoryTitle[row],
_categoryImages[row]];
}
}
这是当前的 prepareForSegue,我想更改它。我想使用segue“aboutCat”将它发送到另一个视图控制器。我该怎么做?
我不明白 prepareForSegue [current] 和 viewDidLoad [destination] 之间发生了什么。谢谢
副作用
“Nikita Take”解决了最初的问题,但有一些副作用
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSIndexPath *myIndexPath = [self.tableView indexPathForSelectedRow];
long row = [myIndexPath row];
if ([_categoryTitle[row] isEqualToString:@"About"])
{
NSLog(@"SKIPPING PREPARE");
}
else if ([[segue identifier] isEqualToString:@"ShowLocationsTableView"])
{
LocationsTableViewController *ViewController =
[segue destinationViewController];
ViewController.categoryDetailModel = @[_categoryTitle[row],
_categoryImages[row]];
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (tableView == self.tableView)
{
// I assume you have 1 section
NSLog(@"DIDSELECTROW");
NSLog(@"INDEX PATH %i", indexPath.row + 1);
NSLog(@"%i", [tableView numberOfRowsInSection:0]);
if (indexPath.row + 1 == [tableView numberOfRowsInSection:0])
{
NSLog(@"ABOUT");
[self performSegueWithIdentifier:@"aboutCat" sender:self];
}
else
{
NSLog(@"ELSE");
[self performSegueWithIdentifier:@"ShowLocationsTableView" sender:self];
}
}
}
现在关于工作!但是,如果我单击另一行,它是 mainSegue 之一。它将调用子视图控制器 2x。我可以在 detailview viewdidload 中使用 NSLOG 语句来验证这一点。问题是现在导航控制器需要两个步骤才能返回。
[home] -> [detail view] -> [same detail view]
我可以验证 didselectrowatindexpath 发生在 prepareforsegue 之前
知道为什么要执行两个 segue 吗?
【问题讨论】:
-
然后在 didselctrowatIndexpath 中添加另一个 segue
-
我可以添加那个方法吗?还需要采取其他措施吗?
-
你需要一些不同的方法
标签: ios objective-c xcode segue