簡體   English   中英

iOS自定義Segue無法正常工作

[英]iOS Custom Segue Not Working

我剛剛開始學習如何開發iOS應用程序。 (請注意,我正在使用XCode 6 beta和Swift)我認為自己可以自己構建接口,但是我似乎在使用segue時遇到了麻煩。

我的應用程序的第一頁只是一個簡單的屏幕,帶有注冊按鈕和登錄按鈕。 我為注冊頁面制作了單獨的視圖控制器,並在其上放置了文本字段。 這兩個視圖控制器都在我的情節提要中。 然后,我創建了一個自定義segue類,以簡單地設置起始頁面和注冊頁面的動畫,從而向左移動一個屏幕,從而現在顯示注冊頁面。 這是我的自定義segue類:

class SlideFromRightSegue: UIStoryboardSegue {
    override func perform() {
        let screenWidth = UIScreen.mainScreen().bounds.width
        let center = self.sourceViewController.view!.center
        UIView.animateWithDuration(0.25,
            animations: {
                self.sourceViewController.view!.center = CGPoint(x: center.x - screenWidth, y: center.y)
                self.destinationViewController.view!.center = CGPoint(x: center.x - screenWidth, y: center.y)
            }, completion: { (finished: Bool) in
                self.sourceViewController.presentViewController(self.destinationViewController as UIViewController, animated: false, completion: nil)
            })
    }
}

我以找到的教程為基礎,但我認為這里沒有問題。 我只是將源和目標VC的中心設置為動畫,以使其位於左側的一個屏幕中。 我不能完全確定動畫在iOS中的工作方式,但是我發現的教程的結構類似,因此我假設調用了傳遞給“ animations”參數的閉包,然后iOS生成了介於兩者之間的所有步驟並將每個幀繪制到屏幕。 (如果我錯了糾正我)

所以我有一個自定義的segue。 我回到情節提要,單擊注冊按鈕,轉到“連接”選項卡,然后將“ Triggered Segues-action”拖到第二個VC上,選擇“ custom”,然后選擇我的自定義類。 由於某些原因,它不僅僅是“ _TtC524SlideFromRightSegue”,而不僅僅是“ SlideFromRightSegue”。 我不確定為什么會這樣,但是我認為這與我重命名了segue類有關,我希望這不會造成任何問題。 無論如何,這樣做會創建從第一個VC到第二個VC的箭頭,因此我認為它是可行的。

當我運行該應用程序時,像往常一樣出現啟動屏幕。 我單擊“注冊”按鈕,但沒有任何反應。 我可能錯過了一些東西,但是我在segue的perform()函數中設置了一個斷點,在第一個VC的prepareForSegue()函數中設置了一個斷點。 沒有人被觸發。 我認為我已經正確設置了segue,但是我的應用程序中的實際實現存在一些問題。 有人知道發生了什么嗎?

我不知道為什么未調用您的perform方法,但這不是由於您的代碼造成的,盡管代碼確實存在一些問題。 您永遠不會將目標視圖控制器的視圖添加到窗口中(直到演示文稿將為您完成的完成)。 因此,您需要添加視圖,將其放置在屏幕外的右側,然后使其居中,而不是像代碼中那樣離開屏幕的左側,

class SlideFromRightSegue: UIStoryboardSegue {

    override func perform() {
        let screenWidth = UIScreen.mainScreen().bounds.width
        let center = self.sourceViewController.view!.center
        let appdel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
        appdel.window!.addSubview(self.destinationViewController.view)
        self.destinationViewController.view!.center = CGPoint(x: center.x + screenWidth, y: center.y)

        UIView.animateWithDuration(0.25,
            animations: {
                self.sourceViewController.view!.center = CGPoint(x: center.x - screenWidth, y: center.y)
                self.destinationViewController.view!.center = center
            }, completion: { (finished: Bool) in
                self.sourceViewController.presentViewController(self.destinationViewController as UIViewController, animated: false, completion: nil)
                self.sourceViewController.view!.removeFromSuperview() 
            })
    }
}

所以,是的,事實證明,問題是我也在使用自定義按鈕類,該類具有對touchesBegan,touchesEnded和touchesCancelled函數的覆蓋。 這些覆蓋沒有回調到超類方法,因此甚至沒有觸發按下按鈕的操作。

我想我從所有這些中學到的教訓是確保知道哪些函數重寫必須回調給超類,而哪些應該完全重寫超類。 觸摸事件處理程序可能需要回調超類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM