Как изменить заголовок кнопки каждый раз, когда в пользовательской ячейке выбрана галочка - PullRequest
0 голосов
/ 10 июня 2018

У меня есть viewcontroller, у которого есть таблица и кнопка внизу.Внутри каждой ячейки есть переключатель в виде tapGesture.Я хотел бы обновить кнопку с количеством выбранных ячеек.Если мой жест находится в пользовательской ячейке, а моя кнопка - в моем контроллере просмотра, как я могу заставить их работать вместе?

Пользовательская ячейка:

class SearchTalentCell: UITableViewCell {
@IBOutlet weak var userProfileImage: UIImageView!
@IBOutlet weak var talentUserName: UILabel!
@IBOutlet weak var selectedImg: UIImageView!
@IBOutlet weak var inviteSentImg: UIImageView!
var prospectRef: FIRDatabaseReference!
var currentTalent: UserType!

func setTalent(talent: UserType) {
    currentTalent = talent
    currentTalent.userKey = talent.userKey
}

override func awakeFromNib() {
    super.awakeFromNib()
    let tap = UITapGestureRecognizer(target: self, action: #selector(selectTapped))
    tap.numberOfTapsRequired = 1
    selectedImg.addGestureRecognizer(tap)
    selectedImg.isUserInteractionEnabled = true
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}


func configureCell(user: UserType, img: UIImage? = nil) {
    prospectRef = Cast.REF_PRE_PRODUCTION_CASTING_POSITION.child(ProjectDetailVC.currentProject).child(FIRDataCast.prospect.rawValue).child(CastingDetailVC.positionName).child(user.userKey)
    setTalent(talent: user)
    self.talentUserName.text = "\(user.firstName) \(user.lastName)"

    prospectRef.observeSingleEvent(of: .value, with: { (snapshot) in
        if let _ = snapshot.value as? NSNull {
            self.inviteSentImg.isHidden = true
        } else {
            self.inviteSentImg.image = UIImage(named: "inviteSent")
            self.inviteSentImg.isHidden = false
        }
    })
    if UserType.selectedTalentForSearch.contains(currentTalent.userKey) {
        selectedImg.image = UIImage(named: "radioSelected")

    } else {
        selectedImg.image = UIImage(named: "radioUnselected")

    }

    //Image Caching
    if img != nil {
        self.userProfileImage.image = img
    } else {

        if let imageURL = user.profileImage {

            let ref = FIRStorage.storage().reference(forURL: imageURL)
            ref.data(withMaxSize: 2 * 1024 * 1024, completion: { (data, error) in
                if error != nil {
                    print("ZACK: Unable to download image from Firebase Storage")
                } else {
                    print("ZACK: Image downloaded from Firebase Storage")
                    if let imgData = data {
                        if let img = UIImage(data: imgData) {
                            self.userProfileImage.image = img
                            SearchTalentVC.userProfileImageCache.setObject(img, forKey: imageURL as NSString)
                        }
                    }
                }
            })
        }
    }
}

@objc func selectTapped(sender: UITapGestureRecognizer) {

    if UserType.selectedTalentForSearch.contains(currentTalent.userKey) {
        selectedImg.image = UIImage(named: "radioUnselected")
        UserType.selectedTalentForSearch = UserType.selectedTalentForSearch.filter{$0 != currentTalent.userKey}
        print("Keys: \(UserType.selectedTalentForSearch)")

    } else {
        selectedImg.image = UIImage(named: "radioSelected")
        UserType.selectedTalentForSearch.append(currentTalent.userKey)
        print("Keys: \(UserType.selectedTalentForSearch)")

    }
}
}

ViewController:

class SearchTalentVC: UIViewController, UITableViewDelegate, UITableViewDataSource {


@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var sendInviteButton: UIButton!
var searchingRole = [Cast]()
var unfilteredTalent = [UserType]()
var filteredTalent = [UserType]()
var selectedTalent = [UserType]()
var matchingTalentUserKeys = [String]()
var isFiltered = false
var selectedCounter = [String]()
var prospectRef: FIRDatabaseReference!
static var userProfileImageCache: NSCache<NSString, UIImage> = NSCache()
let searchController = UISearchController(searchResultsController: nil)

override func viewDidLoad() {
    super.viewDidLoad()
    searchController.searchResultsUpdater = self
    searchController.obscuresBackgroundDuringPresentation = false
    searchController.searchBar.placeholder = "Search Talent"
    searchController.searchBar.barStyle = .black
    navigationItem.searchController = searchController
    definesPresentationContext = true
    searchController.searchBar.scopeButtonTitles = ["All", "Role Specific"]
    searchController.searchBar.tintColor = UIColor.white
    searchController.searchBar.delegate = self
    searchController.searchResultsUpdater = self
    self.sendInviteButton.setTitle("Send Invite to \(UserType.selectedTalentForSearch.count) Prospects", for: .normal)
    getTalentProfiles()

}

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 11 июня 2018

Я не уверен, почему вы используете выделение ячейки внутри ячейки, в отличие от функции делегата tableview func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)?

Если вы используете didSelectRowAt, вы можете иметь массив выбранных строк иВы можете включить selectedRows.count в текст кнопки.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...