我有一个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 [当前]和viewDidLoad [目标]之间会发生什么。谢谢
副作用
最初的问题已由“ Nikita Took”解决,但存在一些副作用
-(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语句进行验证。问题在于,现在导航控制器需要执行两个步骤才能返回家中。
[首页]-> [详细视图]-> [相同详细视图]
我可以验证didselectrowatindexpath是否在prepareforsegue之前发生
有什么想法为什么要执行两个segue?
最佳答案
假设您有两个选择:MainSegue
(对于最后一行除外的所有行)和LastRowSegue
(对于最后一行),您可以执行以下操作:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (tableView == self.tableView) {
// I assume you have 1 section
if (indexPath.row == [tableView numberOfRowsInSection:0]) {
[self performSegueWithIdentifier:@"LastRowSegue" sender:self];
} else {
[self performSegueWithIdentifier:@"MainSegue" sender:indexPath];
}
}
}
尝试使用
prepareForSegue
。如果不是您所需要的,请解释您的意思它有效,但我正在获得双层表视图
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"MainSegue"]) {
NSIndexPath *selectedIndexPath = sender;
LocationsTableViewController *locationController = segue.destinationViewController;
locationController..=categoryDetailModel = @[_categoryTitle[selectedIndexPath.row], _categoryImages[selectedIndexPath.row]];
}
}
关于ios - iOS覆盖Segue,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24858536/