Не могу получить доступ к значениям объекта ячейки в TableView [Swift] - PullRequest
0 голосов
/ 12 марта 2020

Я создал класс с именем BlogPost и tableView. TableView заполняется многими ячейками, и каждая ячейка представляет данные другого пользователя (объект blogPost). В каждой ячейке есть кнопка со значком телефона, и я хочу, чтобы каждый раз, когда пользователь нажимал на кнопку телефона в каждой ячейке, он вызывал номер указанного c объекта в этой ячейке. Проблема в том, что в функции кнопки нет доступа к значению объекта. Строка:

var num = blogPost.phone 

работает внутри функции setBlogPost, но не в функции кнопки вне функции setBlogPost:

@IBAction func whatsAppButton(_ sender: Any) {
    //doesnt work
    var num = blogPost.phone
    openWhatsapp(number: num)
}

num выдает ошибку «Использование неразрешенного» идентификатор 'blogPost'.

Полный код:

import UIKit

class Tavla: UITableViewCell {

    @IBOutlet weak var nameLabelTavla: UILabel!
    @IBOutlet weak var locationButtonTavla: UIButton!
    @IBOutlet weak var phoneButtonTavla: UIButton!
    fileprivate let application = UIApplication.shared

    func setBLogPost(blogPost: BlogPost) {

        nameLabelTavla.text = blogPost.name

        if blogPost.elsertext != "" {

                locationButtonTavla.backgroundColor = UIColor(red: 135/255, green: 197/255, blue: 113/255, alpha: 0.5)
                locationButtonTavla.setTitle("", for: .normal)
            }
        else{
        }

        //num works fine
        var num = blogPost.phone
    }

    @IBAction func whatsAppButton(_ sender: Any) {
        //num gets an error of "Use of unresolved identifier 'blogPost'
        var num = blogPost.phone
        openWhatsapp(number: num)
    }


    func openWhatsapp(number: String){
        let urlWhats = "whatsapp://send?phone=\(number)&abid=12354&text=לעדכן מיקום באפליקציה"
        if let urlString = urlWhats.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed) {
            if let whatsappURL = URL(string: urlString) {
                if UIApplication.shared.canOpenURL(whatsappURL) {
                    UIApplication.shared.open(whatsappURL)
                } else {
                    print("Install Whatsapp")
                }
            }
        }
    }
}

Ответы [ 3 ]

3 голосов
/ 12 марта 2020

Сделать num членом var:

class Tavla: UITableViewCell {
    var num: Int?

    // ...

    func setBLogPost(blogPost: BlogPost) {
        // ...
        num = blogPost.phone
    }

    @IBAction func whatsAppButton(_ sender: Any) {
        guard let num = num else { return }
        openWhatsapp(number: num)
    }
0 голосов
/ 12 марта 2020

Вы просто устанавливаете значение num в методе setBlog как внутреннюю переменную. Тогда переменная num может получить доступ только к методу setBlog. И объект blogPost может быть доступен по методу setBlog, а не по другому методу в этом классе. Если вам нужен доступ к blogPost объекту в этом классе, вам нужно поддерживать переменную в этом классе.

Вот так:

class Tavla: UITableViewCell {
    var blogPost: BlogPost?
 ...

    func setBLogPost(blogPost: BlogPost) {
        self.blogPost = blogPost

         ....

        //num works fine
        var num = blogPost.phone // because it's access the param value
    }

    @IBAction func whatsAppButton(_ sender: Any) {
        // Now can access the blogPost variable on this class
        if let num = self.blogPost?.phone {
             openWhatsapp(number: num)
        }
    }

 }

Теперь объект blogPost может быть доступен методом whatsAppButton.

0 голосов
/ 12 марта 2020

назначить идентификатор blogPost для тега кнопки, например

button.tag = post.id

в функции CellForItemAt , теперь у вас есть ссылка в блог-пост. Вы можете получить клик на блог-посте, используя тег кнопки

@IBAction func whatsAppButton(_ sender: Any) {
        let post = blogPostsArray.filter({$0.id == sender.tag})[0]
        var num = post.phone
        openWhatsapp(number: num)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...