2014-02-19 76 views
0

我已經重複搜索相關答案,但沒有找到(或可能,不明白)任何相關的內容。一些事實:didSelectRowAtIndexPath + performSegueWithIdentifier + modal segue =不能將自己添加爲子視圖

1)我在這方面非常非常新。
2)我正在使用Xcode 5 &針對iOS 7 iPad
3)我試圖添加一個功能(是,死吻)到一個大的,現有的應用程序,由我無法寫的人聯繫

該應用程序有一個分離視圖控制器,鏈接到一個導航控制器,鏈接到一個表視圖(&與原始分割視圖相關的一大堆其他視圖)。 如果用戶選擇的表項具有特定的值,我想打開一個新的視圖(否則讓現有的邏輯處理它)。

我創建了一個新的視圖控制器與模式segue從表視圖。我添加了一個測試到didSelectRowAtIndexPath方法方法:

if([[object name] isEqualToString:@"SpecialCase"]) { 
    [self performSegueWithIdentifier:@"ScSegue" sender:nil]; 
} 

這個工作至少一次,直到我開始嘗試將信息傳遞給新的視圖。我已經添加:

if ([[segue identifier] isEqualToString:@"ScSegue"]) { 
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
    CBPeripheral *object = _objects[indexPath.row]; 
    [[segue destinationViewController] setDetailItem:object]; 
} 

我已經添加了必要的def/decl setDetailItem()到我的新視圖控制器。我不知道當我這樣做的時候是否破壞了某些東西,但即使我把所有這些都歸還了,當我第一次添加segue時,我仍然會得到「不能將自己添加爲子視圖」。是的,我完成了之間的清潔。

我意識到我可能太不知道要嘗試這樣做,但這是我的工作。我大部分時間都在尋找線索而沒有取得成功,所以我在snarkfest之前對自己謙卑。任何援助將不勝感激。

+1

Hello @GerryO,在你的代碼上放置斷點並逐步調試,然後告訴我哪一行出現異常。 –

+0

你好,謝謝!我應該包括這一點。執行此行時發生錯誤:[self performSegueWithIdentifier:@「ScSegue」sender:nil]; – GerryO

回答

2

從didSelectRowAtIndexPath方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     [self performSegueWithIdentifier:@"ShowDetail" sender:tableView]; 
    } 

在prepareForSegue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"ShowDetail"]) 
    { 
     NSIndexPath *indexPath = nil; 
     indexPath = [self.table indexPathForSelectedRow]; 
     SiteMap *site; 
     site = [self.listSite objectAtIndex:indexPath.row]; 
     Detail *detailController = (Detail*)segue.destinationViewController; 
     detailController.string = @"hello"; 
    } 
} 

,這意味着你的 「下一個視圖」 的名字是詳細和具有類型的屬性命名的字符串的NSString

+0

感謝您的回覆,但Xcode對此並不滿意。對不起,這是一個noob,但什麼是SiteMap?我無法在任何地方找到對此的參考。此外,在你使用「細節」的地方,我認爲這應該被我的實際的詳細視圖控制器的名稱取代?或者,這是另一個關鍵字,我無法找到解釋任何地方(我看起來很遠)?再一次,您的幫助非常感謝! – GerryO

+0

你不需要這個對不起,逃脫了我,是細節是你的詳細視圖控制器。 – hypuerta

3

爲SWIFT :

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    self.performSegueWithIdentifier("showItemDetail", sender: tableView) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if segue.identifier == "showItemDetail" { 
     let indexPath:NSIndexPath = self.tableView.indexPathForSelectedRow()! 
     let detailVC:ItemDetailViewController = segue.destinationViewController as ItemDetailViewController 
     detailVC.item = items[indexPath.row] as Item 

    } 
} 
相關問題