2016-10-25 5 views
1

私は迅速に学び、私のアプリケーションのほとんどの基礎を作りました。私は、次のストーリーボード緊急事態が発生していない

app storyboard

すべてが正常に動作しています。たとえば、[保存]を押したときにトリガされる追加のコースビューコントローラには、「あなたのコース」ビューコントローラに返される巻き戻しセグがあります。

私のコースビューコントローラを使用しているときに、コースを選択してトピックが表示され、トピックを選択してスコアビューコントローラを更新することができます。

しかし、私の問題はこれです。 updatescoreビューコントローラで保存を選択すると、アンワインドセグがトリガされ(追加コースと同じ)、トピックビューコントローラのトピックのリストに戻るようにしたいと思います。

しかし、私は多くのチュートリアルに従っていますが、以前はそれがうまく機能していました。 (unwind segueの私のアクションメソッドは正しいトピックコントローラにありますが)私がsaveを押すと、unwind segueは私をトピックビューコントローラに戻していません。

誰でもこの理由を提案できますか?私は答えを見つけようと多くの時間を費やし、多くのチュートリアルを終えましたが、それを解決することはできませんでした。

また、保存ボタンが設定されていることを示すために、トリガーされたセグの接続のスクリーンショットも含まれています。 Showing triggered segue for save button

iは更新スコア・ビュー・コントローラ

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if saveButton === sender { 
     print("save button selected") 
    } 
} 

に次のコードを持っている。しかし、私は保存をクリックしたときにも、これがトリガー取得されていません。

感謝

UPDATE: 次Ronatorysアドバイスした後、次のように更新スコアのための私のビューコントローラがあるが、それはまだ動作していない:

輸入のUIKit

クラスUpdateScoreTableViewController:のUITableViewController {

@IBOutlet weak var topicGettingUpdated: UITextField! 
@IBOutlet weak var newScore: UITextField! 


@IBOutlet weak var saveButton: UIBarButtonItem! 


var index:Int? 
var Topics:[String]! 


var TopicToUpdate:String? 


override func viewDidLoad() { 
    super.viewDidLoad() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

// MARK: - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    guard let uiBarButtonItem = sender as? UIBarButtonItem else { 
     print("There is no UIBarButtonItem sender") 
     return 
    } 
} 


override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    if indexPath.section == 0 && indexPath.row == 0 { 
     newScore.becomeFirstResponder() 
    } 
    tableView.deselectRowAtIndexPath(indexPath, animated: true) 
} 

しかし、segueの準備は起動されていません。

+0

詳細情報なしでこの問題を解決することは非常に困難です。 'prepareForSegue'がトリガされないという事実は、unwind segueが動作していないことを単に確認するだけです。 –

+0

新しいアップデートはありますか? – ronatory

答えて

1

コメントの中のクレイグ氏によると、問題を見つけるのは簡単ではない。だから、私はちょうどあなたがガイドとしてステップを実行し、機能を正しく設定するために何かを忘れていたかどうかを見ることができるシンプルなアプリケーションを構築する。それがあなたを助けることを願っています。 注:コードはスウィフト3.0であるが、二つのビューコントローラで2 *

1.ストーリーボードに採用するのは簡単でなければなりません:

enter image description here

2。

class FirstViewController: UIViewController { 
    // action method for the unwind segue 
    @IBAction func updateScore(_ segue: UIStoryboardSegue) { 
    print("Back in the FirstViewController") 
    } 
} 

3.接続(CTRL +ドラッグで)動作方式にストーリーボードにSave buttonFirstViewController.swiftにアンワインドセグエのアクションメソッドを宣言する

enter image description here

4. をSecondViewController.swiftファイルに接続し、prepareSegueメソッド(Ctrl +ドラッグ)のチェックに使用します。

enter image description here

5.あなたのSecondViewController.swiftprepare(for:sender:)メソッドを追加します。

class SecondViewController: UIViewController { 

    @IBOutlet weak var saveButtonPressed: UIBarButtonItem! 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    // check safely with guard that your save button is the sender and you can use it 
    // if not print message 
    guard let uiBarButtonItem = sender as? UIBarButtonItem else { 
     print("There is no UIBarButtonItem sender") 
     return 
    } 

    // check if you selected the save button 
    if saveButtonPressed == uiBarButtonItem { 
     print("save button selected") 
    } 
    } 
} 

結果:

enter image description here

サンプルアプリを探すことが出来ますhere

+1

こんにちはRonatory、ありがとうございますが、これはうまくいきませんでした。私はあなたのすべてのステップに従ってみましたが、saveを押すと何も起こりません。 Segueの準備が起動されず、 "UIBarButtonItem senderがありません"というメッセージがコンソールに表示されません。 ナビゲーションコントローラについてわからないことが考えられます。そこで、更新スコアが埋め込まれたナビゲーションコントローラを削除しました。すべて正常に動作し、これを理解しています。つまり、スタックを介して戻ることができます。この時点で、私は保存ボタンを動作させることができません。 –

0

私は仕事にアンワインドセグエを取得するために管理する代わりに、回避策として

navigationController!.popViewControllerAnimated(true) 

を使用し、これが正常に動作しませんでした。

関連する問題