2016-10-13 6 views
0

У меня есть tableView с пользовательской ячейкой. в моем обычном cell У меня есть кнопка. монетой Баттона я написал функцию, чтобы изменить состояние от .normal к .selected так:iOS swift UIButton в TableView Cell

FeedViewCell

class FeedViewCell: UITableViewCell { 
@IBOutlet weak var likeButton: UIButton! 


var likes : Bool { 
    get { 
     return UserDefaults.standard.bool(forKey: "likes") 
    } 
    set { 
     UserDefaults.standard.set(newValue, forKey: "likes") 
    } 
} 
override func awakeFromNib() { 
    super.awakeFromNib() 
    self.likeButton.setImage(UIImage(named: "like-btn-active"), for: .selected) 
} 

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

    // Configure the view for the selected state 
} 

@IBAction func likeBtnTouch(_ sender: AnyObject) { 

    print("press") 
    // toggle the likes state 
    self.likes = !self.likeButton.isSelected 
    // set the likes button accordingly 
    self.likeButton.isSelected = self.likes 
} 
} 

FeedViewController:

class FeedViewController: UIViewController { 
@IBOutlet var feedTableView: UITableView! 

override func viewDidLoad() { 

    super.viewDidLoad() 

    // Register Cell Identifier 
    let feedNib = UINib(nibName: "FeedViewCell", bundle: nil) 
    self.feedTableView.register(feedNib, forCellReuseIdentifier: "FeedCell") 
} 

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

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return self.feeds.count 
} 

func tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: IndexPath) -> CGFloat { 

    return UITableViewAutomaticDimension 
} 
func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "FeedCell", for: indexPath) as! FeedViewCell 

    return cell 
} 
} 

Но моя проблема в том, когда я нажимаю кнопку в ячейке с как indexPath.row 0 Состояние кнопки в ячейке indexPath.row 3 изменить состояние тоже.

где моя ошибка?

благодарит

+0

Пожалуйста, добавьте больше кода. Как вы связываете '@ IBAction' с кнопкой? – Adeel

+0

дорогой @Adeel У меня есть файл xib и подключайте '@ IBAction' к кнопке с контролем + перетащить – MohammadReza

+0

На самом деле ваш вопрос непонятен, поэтому трудно понять, что здесь может быть неправильным. Я бы предложил вам добавить еще код вашего 'viewController' и' FeedViewCell'. – Adeel

ответ

0

Вы не отправляли весь код, но я могу вам сказать, что для того чтобы это работало @IBAction func likeBtnTouch(_ sender: AnyObject) { } определения должно быть внутри определения класса FeedViewCell, чтобы сделать его уникальным для конкретного экземпляра клетки.

+0

dear @warby Я добавляю '@IBAction func likeBtnTouch (_ sender: AnyObject) {}' в свой класс FeedViewCell, но проблема все еще существует. – MohammadReza

0

Как правило, я обычно гарантирую, что все элементы пользовательского интерфейса внутри моей ячейки заполняются в cellForRowAtIndexPath при использовании выделенных ячеек. Также он должен быть установлен из внешнего источника. I.o.w не из свойства внутри ячейки. Отбрасывающие ячейки повторно используют их, и если они не будут правильно настроены, у него могут быть некоторые остатки из другой ячейки.

Например, внутри cellForRowAtIndexPath:

self.likeButton.isSelected = likeData[indexPath.row] 
Смежные вопросы