1

これについてはオンラインで多くのチュートリアルがあるようですが、TableView Controller から最初の View Controller に値を戻すチュートリアルが見つかりません。

これが私のセットアップです...最初のViewControllerにはテキストフィールドがあり、ユーザーがそれを押すと、2番目のTableViewControllerに移動し、リストから国を選択できます。選択したら、ナビゲーション バーの [DONE] ボタンを押してから、最初の ViewController に戻り、選択した国をテキスト フィールドに表示します (ボタンを押して、アプリは続きます...)

私が解決できることから、DidSelectRowAtIndexPath メソッドでこれを行う必要があります...? しかし、巻き戻しセグエについての話も見続けていますか? 申し訳ありませんが、Swift と iOS のコードは初めてなので、これを行うための最善かつ最も簡単な方法について明確な回答をいただければ幸いです。各コントローラーについて、以下のコードを参照してください。

ViewController

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

@IBOutlet var textField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

}

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {

performSegueWithIdentifier("countryTableView", sender: self)

return false

}

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

}

TableViewController

import UIKit

class TableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet var tabeView: UITableView!

var countryPicker = ["Colombia", "England", "France", "Germany", "Brazil", "Austria", "Spain", "Australia", "USA", "Berlin", "Thailand", "Northern Ireland", "New Zealand", "Hawaii", "Switzerland", "Sweeden", "Finland", "Turkey", "Russia", "Netherlands", "Japan"]

override func viewDidLoad() {
    super.viewDidLoad()

}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return countryPicker.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("UITableViewCell") as! UITableViewCell

    cell.textLabel!.text = countryPicker[indexPath.row]

    cell.selectionStyle = UITableViewCellSelectionStyle.Blue

    return cell
}

}

前もって感謝します!

4

4 に答える 4

0

weak var previousVC: UIViewController2 番目のビュー コントローラー (テーブル ビュー コントローラー) に以前のビュー コントローラーを含む を追加します。2 番目のビュー コントローラーに移動する前に、最初のビュー コントローラーにメソッドを追加し、thenprepareForSegueを使用して 2 番目のビュー コントローラーにアクセスします。これで、以前のコントローラーにアクセスできるようになりました。最初のビュー コントローラーにプロパティを追加することで、必要なデータを渡すことができます。let destinationVC = segue.destinationViewControllerdestinationVC.previousVC = self

コード:

class ViewController: UIViewController, UITextFieldDelegate {

@IBOutlet var textField: UITextField!

var myObject: Object? // Some object you will pass
override func viewDidLoad() {
    super.viewDidLoad()

}

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {

performSegueWithIdentifier("countryTableView", sender: self)

return false

}
...

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "countryTableView" {
        let tableVC = segue.destinationViewController as! TableViewController
        // Pass the object
        tableVC.passedObject = myObject
    }
}
}


class TableViewController.... {
var passedObject: Object // The object to be passed
...
}
于 2015-06-04T21:49:17.503 に答える
-1

元のビュー コントローラーで、コールバックを処理する IBAction を追加します。

IB コントロール内 セルからビューの上部にある終了アイコンにドラッグします。リリース時には、利用可能な IBAction メソッドの名前を含むポップアップ メニューが表示されます。IBAction メソッドを選択します。

Sender 変数を IBAction に追加すると、そこから情報を取得できるかどうかは覚えていません。

于 2015-06-04T21:43:33.833 に答える