didSelectRowAtIndexPath未被调用

时间:2016-03-17 07:56:31

标签: ios iphone swift

我正在尝试在ios swift中使用youtube api,并遵循本教程http://www.appcoda.com/youtube-api-ios-tutorial/,但是我的didSelectRowAtIndexPath方法永远不会被调用。 任何建议都会有所帮助。谢谢

import UIKit

class SearchVideosViewController: UIViewController, UITableViewDataSource,UITableViewDelegate , UITextFieldDelegate{

    @IBOutlet weak var wait: UIView!
    @IBOutlet weak var tblShowVideoList: UITableView!
    @IBOutlet weak var searchVideoText: UITextField!
    var selectedVideoIndex:Int!
    var videosArray: Array<Dictionary<NSObject,AnyObject>> = []
    var apiKey = "my_api_key"
    override func viewDidLoad() {
        super.viewDidLoad()
        searchVideoText.delegate = self
        tblShowVideoList.delegate = self
        tblShowVideoList.dataSource = self
        wait.hidden = true
        // Do any additional setup after loading the view.
    }

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

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }


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

        return videosArray.count

    }


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


        cell = tableView.dequeueReusableCellWithIdentifier("videolistcell", forIndexPath: indexPath)

        let videoTitle = cell.viewWithTag(10) as! UILabel
        let videoThumbnail = cell.viewWithTag(11) as! UIImageView

        let videoDetails = videosArray[indexPath.row]
        videoTitle.text = videoDetails["title"] as? String
        videoThumbnail.image = UIImage(data: NSData(contentsOfURL: NSURL(string: (videoDetails["thumbnail"] as? String)!)!)!)


        return cell
    }


    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 140.0
    }
    // MARK: UITextFieldDelegate method implementation

    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        wait.hidden = false

        let  type = "video"

        // Form the request URL string.
        var urlString = "https://www.googleapis.com/youtube/v3/search?part=snippet&q=\(textField.text)&type=\(type)&key=\(apiKey)"
        urlString = urlString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!

        // Create a NSURL object based on the above string.
        let targetURL = NSURL(string: urlString)

        // Get the results.
        performGetRequest(targetURL, completion: { (data, HTTPStatusCode, error) -> Void in
            if HTTPStatusCode == 200 && error == nil {
                // Convert the JSON data to a dictionary object.
                do {
                    let resultsDict = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as! Dictionary<NSObject, AnyObject>

                    // Get all search result items ("items" array).
                    let items: Array<Dictionary<NSObject, AnyObject>> = resultsDict["items"] as! Array<Dictionary<NSObject, AnyObject>>

                    // Loop through all search results and keep just the necessary data.
                    for var i=0; i<items.count; ++i {
                        let snippetDict = items[i]["snippet"] as! Dictionary<NSObject, AnyObject>

                        // Gather the proper data depending on whether we're searching for channels or for videos.

                        // Create a new dictionary to store the video details.
                        var videoDetailsDict = Dictionary<NSObject, AnyObject>()
                        videoDetailsDict["title"] = snippetDict["title"]
                        videoDetailsDict["thumbnail"] = ((snippetDict["thumbnails"] as! Dictionary<NSObject, AnyObject>)["default"] as! Dictionary<NSObject, AnyObject>)["url"]
                        videoDetailsDict["videoID"] = (items[i]["id"] as! Dictionary<NSObject, AnyObject>)["videoId"]

                        // Append the desiredPlaylistItemDataDict dictionary to the videos array.
                        self.videosArray.append(videoDetailsDict)

                        // Reload the tableview.
                        self.tblShowVideoList.reloadData()

                    }
                } catch {
                    print(error)
                }



            }
            else {
                print("HTTP Status Code = \(HTTPStatusCode)")
                print("Error while loading channel videos: \(error)")
            }

            // Hide the activity indicator.
            self.wait.hidden = true
        })


        return true
    }
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        print("Selected row index \(indexPath.row)")
        selectedVideoIndex = indexPath.row
        performSegueWithIdentifier("playVideo", sender: self)

    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "playVideo" {
            let videosPlayerViewController = segue.destinationViewController as! VideosPlayerViewController
            videosPlayerViewController.videoID = videosArray[selectedVideoIndex]["videoId"] as! String
        }
    }

    // MARK: Custom method implementation

    func performGetRequest(targetURL: NSURL!, completion: (data: NSData?, HTTPStatusCode: Int, error: NSError?) -> Void) {
        let request = NSMutableURLRequest(URL: targetURL)
        request.HTTPMethod = "GET"

        let sessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()

        let session = NSURLSession(configuration: sessionConfiguration)

        let task = session.dataTaskWithRequest(request, completionHandler: { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                completion(data: data, HTTPStatusCode: (response as! NSHTTPURLResponse).statusCode, error: error)
            })
        })

        task.resume()
    }
}

1 个答案:

答案 0 :(得分:-1)

尝试评论:

searchVideoText.delegate = self