簡體   English   中英

從替換詳細信息控制器的表視圖單元格中搜索不會觸發

[英]segue from table view cells that replace detail controller do not fire

我正在將UISplitViewController用於主/詳細應用程序。 主控制器顯示具有不同單元格的表視圖,這些單元格在被選擇時將替換詳細信息視圖控制器。 選擇單元后, 不會觸發相應的替換任務。

您可以在下面的圖像中看到,我有一個替換標記連接到標有“省名稱”的表格視圖單元格。

帶有替換標記的主控制器表視圖單元在此處輸入圖片說明

tableView:didSelectRowAtIndexPath:方法被調用,我可以通過編程生成與SEGUE performSegueWithIdentifier:sender: ,但我應該這樣做! 我經常在表視圖單元格中使用push segue,這沒有問題。

有趣的是,如果我連接一個替代SEGUE到UIBarButtonItem只是正常工作(即我沒有編程方式執行SEGUE)。 該問題特別是替換連接到表格視圖單元格的序列。

這是一個錯誤還是我在這里忽略了什么?

可能是您在創建序列時選擇了“輔助動作”而不是“選擇序列”?

在處理了一段時間之后,我認為我有一個線索來說明為什么對於表視圖單元格來說自動替換替換不是自動的。 在大多數情況下,當前的詳細視圖控制器是正確的類型-您只想更改其“詳細信息”。 僅當您需要其他類型的明細控制器時,才(然后只有)才需要執行segue來替換當前的明細視圖控制器。 因此,我將替換segue與主視圖控制器(而不是表單元格)鏈接在一起,並使用以下邏輯,該邏輯僅在確實需要新控制器時才執行segue:

- (void)tableView:(UITableView *)tv  didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // ...

    if (indexPath.section == 0) {  // Canadian Province
        if ([self.detailViewController isKindOfClass:[ProvinceDetailViewController class]]) {
            self.detailViewController.detailItem = 
                          [appDelegate.provincesDictionary objectForKey:place];
            self.detailViewController.title = place;
        } else {
            [self performSegueWithIdentifier:@"ProvinceSegue" sender:self];
        }
    }

    // ...
}

PS:如果對分割視圖控制器使用replace segues,請確保分割視圖委托不是詳細視圖控制器(這是Xcode模板排列事物的方式)。 我創建一個獨立的委托對象,該對象在調用關聯的委托方法時發送通知。 這似乎工作得很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM