クラス資産の詳細を表示する2つの異なるUITableViewで構成されるSwift3のアプリケーションがあります。両方のテーブルのデータの内容は同じ/類似です(いくつかのフィルタがあります)、プレゼンテーションは異なります。したがって、このUIViewTablesの1つは、各アセットのコメント例を示し、もう1つはステータスに焦点を当てています。Swift3とSegue:2つの異なるUITableViewControllerが1つのUIViewを指している
ユーザーがテーブルセルをクリックすると、両方のテーブルが同じデータを最後に表すため、両方のUITableViewが同じUIViewを開きます。
私はUINavigationControlを埋め込み、各TableCellに対してセグを作成しました。セルをクリックすると、正しい詳細画面が開きます。
しかし、私がそれを保存すると、私が2番目から始まっても、常に最初のテーブルに戻ってきます。
誰でも私にヒントを教えてもらえますか?
ここに私のDetailViewControllerは、保存ボタンをクリックすると呼び出されるメソッドを用意しています。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
print(segue.identifier)
// Configure the destination view controller only when the save button is pressed.
guard let button = sender as? UIBarButtonItem, button === btnSave else
{
//os_log("The save button was not pressed, cancelling", log: OSLog.default, type: .debug)
return
}
asset?.name = tfDeviceName.text ?? ""
//here comes some other stored asset information...
}
は、ここに私の最初のUITableViewController
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
switch(segue.identifier ?? "")
{
case "AddItem":
os_log("Adding a new asset.", log: OSLog.default, type: .debug)
case "ShowDetails":
guard let assetDetailViewController = segue.destination as? DetailViewController else {
fatalError("Unexpected destination: \(segue.destination)")
}
guard let selectedAssetCell = sender as? AssetTableViewCell else {
fatalError("Unexpected sender: \(String(describing: sender))")
}
guard let indexPath = tableView.indexPath(for: selectedAssetCell) else {
fatalError("The selected cell is not being displayed by the table")
}
selectedIndex = indexPath.row
let selectedAsset = assets[indexPath.row]
assetDetailViewController.asset = selectedAsset
default:
fatalError("Unexpected Segue Identifier; \(String(describing: segue.identifier))")
}
editMode = true
}
である。これは私の第二のUITableViewController
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
switch(segue.identifier ?? "") {
case "AddItem":
os_log("Adding a new asset.", log: OSLog.default, type: .debug)
case "ShowTask":
guard let taskDetailViewController = segue.destination as? DetailViewController else {
fatalError("Unexpected destination: \(segue.destination)")
}
guard let selectedAssetCell = sender as? TaskTableViewCell else {
fatalError("Unexpected sender: \(String(describing: sender))")
}
guard let indexPath = tableView.indexPath(for: selectedAssetCell) else {
fatalError("The selected cell is not being displayed by the table")
}
let selectedAsset = assets[indexPath.row]
taskDetailViewController.asset = selectedAsset
default:
fatalError("Unexpected Segue Identifier; \(String(describing: segue.identifier))")
}
}
ですありがとうございます!溶液で BR ステファン
編集:私は私の問題を発見したダンカンのヒントに
Thxを。アンワインドアクションは、ボタンをexitイベントにcrtl-クリックしてドラッグし、アンワインドメソッドを選択することによって、インターフェイスビルダの保存ボタンにアタッチされます。そして重要なことがここにあります:あなたはクラスだけでなく、一つのメソッドしか選択できません。クラスはナビゲーションを管理するシステムによって自動的に選択されますが、両方のメソッド(同じように)は同じ巻き戻し名を持つ必要があります。私は2番目のUITableViewのunwindメソッドが少し異なっていたので、システムは正しいUITableViewでメソッドを見つけられず、正しいメソッドを持つUITableViewにジャンプします。このクラスは元のsegueではありません
私が使用そこに取得するために使用どんな方法の逆を使用しますかこれらはAppleの公式チュートリアルですが、私は2つのテーブルだけでなく、2つのテーブルを持っているという違いがあります(https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/ImplementNavigation.html#//apple_ref/doc/ uid/TP40015214-CH16-SW1)。 私のスナップされたように、私の保存ボタンコールは、DetailViewControllerで準備し、私の資産の変更を保存してから間違ったテーブルにジャンプします。両方のUITableViewにunwindメソッドがあり、unwindに反応します。正しいセグを設定する方法はありますか?チュートリアルのように、私は決して却下を呼び出すことはありません。「キャンセル」 – user3354754
「私のスナップで示されているように、私のセーフボタンが準備をしています...」DetailViewControllerのsaveボタンアクションからコードを投稿しませんでした。それが私たちが見る必要があるコードです。 「...保存ボタンがDetailViewControllerで準備され、アセットの変更が保存された後、間違ったテーブルにジャンプします。 「電話をかけて準備する」とはどういう意味ですか?そして、 "ジャンプバック"とはどういう意味ですか?そのコードを表示します。 –
ああ私のエラーが見つかりました。私はストーリーボードの保存ボタンをキャンバスからExitイベントにドラッグしてコントロールし、テーブルビューワンのアンワインドセグを選択しました。私は、コード内で正しい表の動的に呼び出されるメソッドを変更することが可能だと思います。 – user3354754