Swift:Xcode 6.1.1 更改由代码块执行而不是按钮触发的视图

Posted

技术标签:

【中文标题】Swift:Xcode 6.1.1 更改由代码块执行而不是按钮触发的视图【英文标题】:Swift: Xcode 6.1.1 change views triggered by code block executions rather than buttons 【发布时间】:2015-02-03 20:56:25 【问题描述】:

我正在开发一个适用于蓝牙设备的 ios 应用。我有一个带有回调函数的.swift 文件,每个回调函数都会更改我的变量state。每次 state 变化时,我都希望视图发生变化。我尝试过.instantiateViewControllerWithIdentifiersourceViewController.presentViewController(destinationViewController, animated: false, completion: nil),并进行了转场。当我谷歌时,我只找到使用UIButtons@IBAction 功能的解决方案。

如果有人知道如何更改由代码块执行而不是按钮触发的视图,我将不胜感激。下面是我的回调代码,并注释了触发场景切换的位置和内容。

enum State: String 
case Inactive = "Inactive"
case Searching = "Searching"
case CheckingOut = "CheckingOut"
case InRental = "InRental"
case Returned = "Returned"
   

class RentalController: UIViewController, bleDelegate 
var state = State.Inactive
var unlocked: Bool = false
var service = btDiscoverySharedInstance.bleService

override func viewDidLoad() 
    super.viewDidLoad()


func startBLE() 
    btDiscoverySharedInstance
    btDiscoverySharedInstance.Bdelegate = self

    service?.startDiscoveringServices()

    state = State.Searching // Start at Home Screen
    println(state.rawValue)



func devicefound() 

    service?.fireSolenoid()

    state = State.CheckingOut // Change to Screen 1
    unlocked = true
    println(state.rawValue)
    segment.perform()


func btnNotification(value: NSData)

    let pBuffer: [Byte] = [0x00]
    let rBuffer: [Byte] = [0x02]
    let buttonPressed = NSData(bytes: pBuffer, length: pBuffer.count)
    let buttonReleased = NSData(bytes: rBuffer, length: rBuffer.count)

    if(value == buttonPressed) 

        state = State.InRental  // Change to Screen 2
        println(state.rawValue)
        //viewDidAppear(false)
    

    // Disconnect then reconnect
    if(value == buttonReleased) 

        state = State.Returned // Change back to home screen
        println(state.rawValue)
        btDiscoverySharedInstance.disconnect()

    


【问题讨论】:

【参考方案1】:

首先选择您要导航到的转场。在属性检查器中定义一些标识符。

在你的类中调用这个方法:

self.performSegueWithIdentifier("Identifier", sender: self)

【讨论】:

感谢您的建议,但这样做会引发我不明白的错误。 *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“接收者()没有标识符为“centerToNav”的segue。有任何想法吗?我觉得无论我将方法放在哪个类中,它都会以类似的错误响应。 嗯,那你没有正确设置标识符。你必须点击segue本身来设置标识符,你这样做了吗? 是的,我做到了。我也尝试过 prepareForSegue 功能,但我也遇到了麻烦。你知道我需要任何其他准备功能来让班级识别现有的转场吗?

以上是关于Swift:Xcode 6.1.1 更改由代码块执行而不是按钮触发的视图的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式更改由标签值对对象填充的 Dojo Form Select 的选定选项

更改由 sklearn.model_selection.train_test_split 产生的数组中的值类型

如何更改由背景颜色确定的文本颜色?

更改由 Maven 解包的源的权限?

更改由 ng-repeat 生成的 textareas 的值

如何更改由 django 表单类创建的输入文本字段的边框半径?