Установка значений для UILabels в ячейке просмотра таблицы iOS

Я новичок в разработке Swift и iOS, извините за вопрос новичка. Я пытаюсь установить два текстовых значения UILabel и UIImageView в своих ячейках представления таблицы. У меня есть данные из API www.thecocktaildb.com

Я ищу и получаю данные из строки поиска, например: http://www.thecocktaildb.com/api/json/v1/1/search.php?s=margarita

Я не знаю, как получить эти значения в UILabels / UIImageView. Может ли кто-нибудь указать мне правильное направление? Или если я неправильно его настраиваю в раскадровке. Спасибо!

Ниже приведен мой SearchViewController с панелью поиска, табличным представлением и ячейкой табличного представления.

Контроллер представления поиска в моей раскадровке

Ниже прилагается мой файл SearchViewController.swift.

class SearchViewController: UIViewController, UISearchBarDelegate, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var TableView: UITableView!
    @IBOutlet weak var SearchBar: UISearchBar!

    // search in progress or not
    var isSearching : Bool = false

    override func viewDidLoad() {
        super.viewDidLoad()

        for subView in self.SearchBar.subviews
        {
            for subsubView in subView.subviews
            {

                if let textField = subsubView as? UITextField
                {
                    textField.attributedPlaceholder  = NSAttributedString(string: NSLocalizedString("Search", comment: ""))

                }
            }
        }

        // set search bar delegate
        self.SearchBar.delegate = self
    }

    func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {

        if self.SearchBar.text!.isEmpty {

            // set searching false
            self.isSearching = false

        }else{

            // set searghing true
            self.isSearching = true

            let userSearchInput = self.SearchBar.text!.lowercaseString

            let newString = userSearchInput.stringByReplacingOccurrencesOfString(" ", withString: "%20", options: NSStringCompareOptions.LiteralSearch, range: nil)

            let postEndpoint: String = "http://www.thecocktaildb.com/api/json/v1/1/search.php?s=" + newString

            guard let url = NSURL(string: postEndpoint) else {
                print("Error: cannot create URL")
                return
            }

            let urlRequest = NSURLRequest(URL: url)
            let config = NSURLSessionConfiguration.defaultSessionConfiguration()
            let session = NSURLSession(configuration: config)

            let task = session.dataTaskWithRequest(urlRequest, completionHandler: { (data, response, error) in
                guard let responseData = data else {
                    print("Error: did not receive data")
                    return
                }
                guard error == nil else {
                    print("error calling GET on www.thecocktaildb.com")
                    print(error)
                    return
                }
                // parse the result as JSON, since that's what the API provides
                let post: NSDictionary
                do {
                    post = try NSJSONSerialization.JSONObjectWithData(responseData,
                        options: []) as! NSDictionary
                } catch  {
                    print("error trying to convert data to JSON")
                    return
                }

                var count = 1
                if let drinks = post["drinks"] as? [NSDictionary] {
                    for drink in drinks {
                        if let strDrink = drink["strDrink"] as? String {
                            print(String(count) + ". " + strDrink)
                            count++
                        }
                        if let strCategory = drink["strCategory"] as? String {
                            print("    Category: " + strCategory)
                        }
                        if let strDrinkThumb = drink["strDrinkThumb"] as? String {
                            print("    Thumbnail Image: " + strDrinkThumb)
                        }
                    }
                }

            })
            task.resume()

        }

    }

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

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
        return cell
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    }

    // hide kwyboard when search button clicked
    func searchBarSearchButtonClicked(searchBar: UISearchBar) {
        self.SearchBar.resignFirstResponder()
    }

    // hide keyboard when cancel button clicked
    func searchBarCancelButtonClicked(searchBar: UISearchBar) {
        self.SearchBar.text = ""
        self.SearchBar.resignFirstResponder()
    }

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

Пример данных, которые я получаю при выводе на консоль:

1. Margarita
    Category: Ordinary Drink
    Thumbnail Image: http://www.thecocktaildb.com/images/media/drink/wpxpvu1439905379.jpg
2. Margarita #2
    Category: Ordinary Drink
3. Blue Margarita
    Category: Ordinary Drink
    Thumbnail Image: http://www.thecocktaildb.com/images/media/drink/qtvvyq1439905913.jpg
4. Peach Margarita
    Category: Cocktail
5. Midori Margarita
    Category: Ordinary Drink
6. Golden Margarita
    Category: Cocktail
7. Purple Margarita
    Category: Ordinary Drink
8. Mansion Margarita
    Category: Ordinary Drink
9. JimPop's Margarita
    Category: Ordinary Drink
10. Catalina Margarita
    Category: Cocktail
11. Ultimate Margarita
    Category: Cocktail
12. Whitecap Margarita
    Category: Other/Unknown
    Thumbnail Image: http://www.thecocktaildb.com/images/media/drink/srpxxp1441209622.jpg
13. Frozen Margarita #1
    Category: Ordinary Drink
14. Frozen Margarita #2
    Category: Ordinary Drink
15. Top Shelf Margarita
    Category: Cocktail
16. BlackJack Margarita
    Category: Ordinary Drink
17. Strawberry Margarita
    Category: Ordinary Drink
    Thumbnail Image: http://www.thecocktaildb.com/images/media/drink/tqyrpw1439905311.jpg
18. Bartender's Margarita
    Category: Ordinary Drink
19. The Perfect Margarita #1
    Category: Cocktail
20. The Perfect Margarita #2
    Category: Cocktail
21. RumRunner's Easy Margarita
    Category: Cocktail
22. Hand-Shaken Margarita on the Rocks
    Category: Ordinary Drink
23. Ken and Kirsten's top shelf Margarita
    Category: Ordinary Drink

person Bob Jack    schedule 07.01.2016    source источник
comment
Вам нужно будет настроить свой cellForRowAtIndexPath. Похоже, вы используете ванильный UITableViewCell, поэтому вам понадобятся розетки на TableViewController, чтобы установить ярлыки через cellForRowAtIndexPath.   -  person Adrian    schedule 07.01.2016
comment
Когда я добавляю три выхода в свой файл searchviewcontroller.swift, я получаю сообщение «Ошибка: недопустимая конфигурация: выход DrinkName из SearchViewController в UILabel недействителен. Розетки не могут быть подключены к повторяющемуся контенту. @AdrianB   -  person Bob Jack    schedule 07.01.2016


Ответы (1)


UITableViews работают по модели вытягивания, поэтому вам нужно хранить напитки в переменной массива на контроллере представления, где вы в данный момент распечатываете результат. Затем вызовите reloadData в табличном представлении. Чтобы хранить напитки безопасным способом, создайте класс модели напитка с именем, категорией и т. Д. В качестве свойств. Затем в numberOfRowsInSection верните drink.count, а в cellForRowAtIndexPath получите напитки [indexPath.row], из которых вы сможете получить имя и т. Д., И используйте это для заполнения меток в tableviewcell. Получить изображение сложнее, так как вам нужно будет сделать еще один сетевой запрос, но как только вы получите рабочий текст, вы добьетесь значительного прогресса.

person Dallas Johnson    schedule 07.01.2016
comment
Когда я добавляю три выхода в свой файл searchviewcontroller.swift, я получаю сообщение «Ошибка: недопустимая конфигурация: выход DrinkName из SearchViewController в UILabel недействителен. Розетки не могут быть подключены к повторяющемуся контенту. @ Даллас Джонсон - person Bob Jack; 07.01.2016
comment
Для начала попробуйте использовать UITableviewCells по умолчанию, который будет внутри cellForRowAtIndexPath. Затем вы можете просто текст для встроенных текстовых меток и не нуждаться в каких-либо выходах для uilabels. Дополнительные сведения см. Здесь developer.apple.com/library/ios/ документация / UIKit / Справочник / - person Dallas Johnson; 08.01.2016