我有一個tableview控制器,我想重寫最後一行的segue。我不想去標準的目標視圖控制器,而是想將它發送到另一個控制器。我該怎麼做呢?iOS重寫一個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]之間會發生什麼。由於
副作用
最初的問題是由「尼基塔接過」解決但有一些副作用
-(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];
}
}
}
現在大約作品!但是如果我點擊另一行,這是主要的一個。它會調用子視圖控制器2x。我可以使用詳細視圖viewdidload中的NSLOG語句驗證此情況。問題是現在導航控制器需要兩個步驟才能返回家中。
[首頁] - > [詳細視圖] - > [相同的細節視圖]
我可以驗證didSelectRowAtIndexPath方法的prepareforsegue
爲什麼是兩個塞格斯是預製任何想法之前發生?
然後在didselctrowatIndexpath –
添加另一個SEGUE我可以再補充該方法?任何其他行動需要? – Marcus
你需要一些不同的方法 –