2015-02-06 38 views
1

我正在檢查我的標籤和圖像(圖像是否與標籤鏈接,因此只是檢查標籤)以查看用戶是否可以繼續。如果他已經填充所有的細節(使用pickerView和datePicker),用戶可以繼續。否則,用戶會收到警報以填寫詳細信息,並應保持在同一頁面上。if-else之後不需要的segue Swift

以下是我正在使用的代碼。一切正常,但應用程序收到警報後執行不需要的時間。

不需要的問題是兩種類型:

  1. 如果我直接點擊進入下一頁(不接觸pickerViews),它會告訴我的警告,但是當我點擊確定,它會執行一個原因請看上一頁。另一方面,如果我根據需要完成所有細節,請單擊NEXT(根據需要將我帶到下一個視圖控制器),並且如果從該視圖控制器單擊BACK返回到初始選取器視圖的所有內容,都將按需要工作。但是,如果我不點擊下一步而不執行選取器視圖操作,則此時它會向我顯示警報並將我帶到NEXT視圖控制器。

所以基本上問題是,

  • ,如果我不填細節,我得到警報,並獲得SEGUE上一視圖控制器
  • 如果我填寫詳細信息,點擊下一步,比點擊回到同一個選擇器選擇視圖控制器,然後點擊下一個沒有觸摸我得到一個繼續下一個視圖控制器。

我只是希望它留在警報後的當前視圖控制器(選擇器視圖選擇頁面)。我究竟做錯了什麼?

代碼如下:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if (xLabel.text! != "" && yLabel.text! != "") { 

     var user = PFUser.currentUser() 
     var myGender: AnyObject! = user["gender"] 
     var myName: AnyObject! = user["name"] 
     var DestView : UserDetailViewController = segue.destinationViewController as UserDetailViewController 
     DestView.uDetailName = "\(myName)" 
     DestView.uDetailGender = "\(myGender)" 
     DestView.uDetailBar = "\(xLabel.text!)" 
     DestView.uDetailDate = dateLabel.text! 
     DestView.uDetailBarPic = PickerViewImage.image! 
     DestView.uDetailQuantity = "\(yLabel.text!)" 
    } else { 

     self.displayAlert("Could not proceed", error: "Please select 'Location' and 'Number of people' to proceed") 
    } 
} 

func displayAlert(title:String, error:String) { 
    var alert = UIAlertController(title: title, message: error, preferredStyle: UIAlertControllerStyle.Alert) 
    alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { action in 
     self.dismissViewControllerAnimated(true, completion: nil) 
    })) 
    self.presentViewController(alert, animated: true, completion: nil) 
} 

我會很感激你的幫助。謝謝。

回答

1

prepareForSegue爲判斷是否應該執行segue還爲時太晚 - 此時segue已經落實。

您應該執行功能shouldPerformSegueWithIdentifier。你從這個函數返回一個布爾值,指出你是否想繼續繼續。

override func shouldPerformSegueWithIdentifier(identifier: String!, sender: AnyObject!) -> Bool { 
    if (xLabel.text! != "" && yLabel.text! != "") { 
     return true 
    } else {  
     self.displayAlert("Could not proceed", error: "Please select 'Location' and 'Number of people' to proceed") 
     return false 
    } 
} 
+0

謝謝。我的理解是,現在我首先檢查是否符合條件,如果滿足,則繼續執行,否則將顯示警報。所以現在我有兩個功能 - 一個應該執行帶有標識符和prepareForSegue的Segue。但我仍然遇到同樣的問題。是因爲我搞亂了目標視圖控制器嗎?我很抱歉,我是編碼方面的新手,所以可能在這裏講愚蠢。希望你的幫助。謝謝。 – 2015-02-06 15:49:07

+0

您可以談談選取器視圖,但是您正在檢查兩個標籤的值,因此您可能在將數據從選取器視圖複製到這些標籤時,或者與您如何將故事板上的鏈接複製到故事板時有一些問題 - 這裏的代碼不會導致你所描述的問題 – Paulw11 2015-02-06 20:19:21

+0

非常感謝。我會檢查我的代碼,看看我能否解決問題。 – 2015-02-07 02:41:07