如何在视图控制器之间正确切换

时间:2014-06-18 21:48:29

标签: ios swift

我在尝试使用objective-c和现在的Swift时遇到了这个问题。我创建了一个视图控制器(vc1),用导航控制器嵌入它,然后最终创建一个新的视图控制器(vc2)。然后,我在vc1上放了一个按钮,然后将其拖动到vc2。我运行应用程序,一切都很好,花花公子,单击按钮将新视图控制器推入堆栈,按后退按钮将带我回来。但是,一旦我继续向vc2添加新按钮和文本字段,一旦我按下vc1上的原始按钮,应用程序将崩溃,引用应用程序委托文件的第一行作为断点。我尝试了很多东西,即尝试使用self.performSegueWithIdentifier方法对segue进行编码,但它不起作用。我正在使用Xcode 6。

storyboard.swift(vc1的文件):

import UIKit

class storyboard: UIViewController {

    @IBOutlet var titleLabel : UILabel
    @IBOutlet var orLabel : UILabel

    @IBAction func weightedAverageButtonPressed(sender : AnyObject) {

        self.performSegueWithIdentifier("weightedAverage1", sender: self)
    }

    @IBAction func whatINeedButtonPressed(sender : AnyObject) {
    }
}

weightedAverage.swift(vc2)(我已经评论了所有内容以摆脱崩溃,但没有运气):

import UIKit

class weightedAverage: UIViewController {

 /*   @IBOutlet var weightAverageTitleLabel : UILabel
    @IBOutlet var percentagetoCalcLabel : UILabel
    @IBOutlet var percentageLabel : UILabel
    @IBOutlet var percentageInput : UITextField

    @IBAction func continueButton(sender : AnyObject)
    {

     //var percent = percentageInput.text

    // percentageLabel.text = percent

    }*/

}

appdelegate.swift:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {

        return true
    }
}

以下是调试输出的内容(当我已经注释掉我的IBAction方法时):

2014-06-19 12:29:12.471 gradeCalc [13217:580024] - [_ TtC9gradeCalc10storyboard weightedAverageButtonPressed:]:无法识别的选择器发送到实例0x10bb0ad30 (LLDB)

它还突出显示了从"类AppDelegate开始的app delegate行...."

当我取消注释包含performSegue ...方法的方法时,所有输出日志都会显示 "(LLDB)"它仍然突出显示应用代表行

1 个答案:

答案 0 :(得分:1)

您是否尝试删除按钮的手动IBAction代码并仅使用故事板上的segue?如果您同时使用Storyboard和Class文件,它可能会尝试同时进行两次。

编辑:我的工作示例中的两个视图控制器的所有代码

First View Controller:

class OneViewController: UIViewController {


@IBOutlet var label1: UILabel

@IBOutlet var label2: UILabel

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

第二视图控制器:

class TwoViewController: UIViewController {
@IBOutlet var upperlabel: UILabel
@IBOutlet var lowerlabel: UILabel
@IBOutlet var textbox: UITextField
@IBAction func button(sender: AnyObject) {
    var percent = textbox.text
    lowerlabel.text = percent
}
override func viewDidLoad() {
    super.viewDidLoad()
    }

由于NDA无法添加图片,但Storyboard只是NavigationController> VC1> VC2,每个VC中有两个标签,VC2中有一个文本框,每个中都有一个按钮。只有第二个按钮在其VC类中有一个动作。