2015-11-27 39 views
1

我有一個作爲自定義單元格的視圖內的表格佈局,我面臨的問題是,單元格里面有一個按鈕,我想單擊它時隱藏單元格中的按鈕(只有被單擊的單元格應該是隱藏)我如何用正確的方法做事?如何在swift ios中點擊單元格中的按鈕?

ScrollCell.swift

class ScrollCell: UITableViewCell { 

    @IBOutlet weak var ProfilePic: SpringImageView! 
    @IBOutlet weak var UserName: SpringButton! 
    @IBOutlet weak var Closet: UILabel! 
    @IBOutlet weak var Style: UILabel! 
    //------// 
    @IBOutlet weak var MianImg: UIImageView! 
    //-------// 
    @IBOutlet weak var ProductName: UILabel! 
    @IBOutlet weak var LoveCount: UIButton! 
    @IBOutlet weak var Discount: UILabel! 
    @IBOutlet weak var OrginalPrice: UILabel! 
    @IBOutlet weak var Unliked: UIButton! 
    @IBOutlet weak var Liked: UIButton! 
    @IBOutlet weak var Comment: UIButton! 
    @IBOutlet weak var Share: SpringButton! 

    override func awakeFromNib() { 
     super.awakeFromNib() 

    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 
    } 
    override func layoutSubviews() { 
     ProfilePic.layer.cornerRadius = ProfilePic.bounds.height/2 
     ProfilePic.clipsToBounds = true 
    } 
} 

ScrollController.swift

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 // however many sections you need 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    print(try! Realm().objects(Feed)) 
    var FeedModel = Feed() 

    let realm = try! Realm() 
    let tan = try! Realm().objects(Feed).sorted("ID", ascending: false) 

    return tan.count // however many rows you need 
} 

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

    // get an instance of your cell 
    cell = tableView.dequeueReusableCellWithIdentifier("ScrollCellDqueue", forIndexPath: indexPath) as! ScrollCell 
    IndexPath = indexPath.row 
    var FeedModel = Feed() 
    let realm = try! Realm() 
    let tan = try! Realm().objects(Feed).sorted("ID", ascending: false) 
    cell.ProfilePic.kf_setImageWithURL(NSURL(string:tan[indexPath.row].ProfilePic)!) 
    cell.UserName.setTitle(tan[indexPath.row].FullName, forState: .Normal) 
    cell.Style.text = tan[indexPath.row].StyleType 

    if tan[indexPath.row].UserType == "store_front"{ 
     cell.Closet.text = "Store Front" 
    }else if tan[indexPath.row].UserType == "normal"{ 
     cell.Closet.text = "Pri Loved" 
    } 

    //-----// 

    var SingleImage:String = "" 
    var ImageArray = tan[indexPath.row].ImageArraySet.componentsSeparatedByString(",") 
    SingleImage = ImageArray[0] 
    cell.MianImg.kf_setImageWithURL(NSURL(string:SingleImage)!) 

    //-----// 

    cell.ProductName.text = tan[indexPath.row].ItemName 
    cell.OrginalPrice?.text = "\(tan[indexPath.row].OrginalPrice)" 
    cell.LoveCount.setTitle("\(tan[indexPath.row].LikeCount)"+" Loves", forState: .Normal) 
    cell.Discount.text = "\(tan[indexPath.row].Discount)"+" % off" 

    if(tan[indexPath.row].LikeStatus){ 
     cell.Unliked.hidden = true 
     cell.Liked.hidden = false 
    } 
    else if (!tan[indexPath.row].LikeStatus){ 
     cell.Unliked.hidden = false 
     cell.Liked.hidden = true 
    } 
    cell.Unliked.tag = tan[indexPath.row].ID 
    cell.Liked.tag = tan[indexPath.row].ID 
    return cell 

} 

@IBAction func LikeBtn(sender: AnyObject) { 
     print(sender.tag) 
     print(IndexPath) 
     //here i want to know who i can hide the button i have clicked ? 
} 

在這裏,我想訪問該按鈕被點擊單元格並更改UI項目是如何細胞內我可以那樣做嗎?

回答

1

喜歡是的UIButton在ScrollCell,我不知道,爲什麼你可以在ScrollController中爲它添加IBAction? 。您必須在ScrollCell和代碼實現:

@IBAction func LikeBtn(sender: UIButton) { 
    print(sender.tag) 
    sender.hiden = true 

}

,我想,如果你只有一個的UIButton,它會更好。在那裏,像和不像是烏布頓的兩種狀態(沒有選擇)。當你點擊按鈕,改變它的狀態

更新:

class sampleCell: UITableViewCell{ 
    @IBOutlet var btnLike : UIButton! 
    @IBOutlet var btnUnLike : UIButton! // frame of 2 button is equal 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     self.btnUnLike.hidden = true 
     // ... 
    } 

    func updateData(data:AnyObject){ // data's type is Feed 
     // set data for cell 
     // i think you should implement in here. and in ScollController call : cell.updateData() , it's better 

     /* e.x 
     self.ProductName.text = tan[indexPath.row].ItemName 
     self.OrginalPrice?.text = "\(tan[indexPath.row].OrginalPrice)" 
     self.LoveCount.setTitle("\(tan[indexPath.row].LikeCount)"+" Loves", forState: .Normal) 
     self.Discount.text = "\(tan[indexPath.row].Discount)"+" % off" 

     */ 
    } 

    @IBAction func likeTap(sender:UIButton){ // rememeber set outlet event for btnLike and btnUnLike is this function 
     if sender == self.btnLike{ 
      self.btnLike.hidden = true 
      self.btnUnLike.hidden = false 
      // do s.t 
     }else if sender == self.btnUnLike{ 
      self.btnLike.hidden = false 
      self.btnUnLike.hidden = true 
      // do s.t 
     } 
    } 
} 
+0

當我點擊按鈕,我需要訪問該單元的用戶界面組件(如按鈕,標籤),並作出改變,你能幫我嗎? –

+0

雅,我更新了我的文章。在likeTap函數中,你可以訪問單元格的所有公共屬性:標籤,圖像視圖,按鈕...希望它是有用的 –

+0

雅我現在看到,以前它沒有加載 –

1

檢查下列代碼幫助

@IBAction func LikeBtn(sender: AnyObject) { 
     var position: CGPoint = sender.convertPoint(CGPointZero, toView: self.tableView) 
     let indexPath = self.tableView.indexPathForRowAtPoint(position) 
     let cell: UITableViewCell = tableView.cellForRowAtIndexPath(indexPath!)! as 
     UITableViewCell 
     print(indexPath?.row) 
    } 
+0

什麼代碼是「convertPoint」? –

+0

獲取發件人的相對位置是很快的功能。它給出了按鈕的座標與視圖 – PK20

+0

謝謝,在這裏我想訪問單擊按鈕,並更改該單元格內的UI項目的單元格,我該怎麼做? –

1

給LikeBtn財產indexpath中的cellForRowAtIndexPath方法,通過indexPath到LikeBtn,那麼你就會知道哪個小區的LikeBtn點擊。

class LikeBtn: UIButton { 
    var indexPath: NSIndexPath? 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) 
    // here pass the indexpath to your button 
    cell.likeBtn.indexPath = indexPath 


    return cell 
} 
@IBAction func likeTap(sender: LikeBtn){ 
    if let indexPath = sender.indexPath { 
     if let cell = tableView.cellForRowAtIndexPath(indexPath) { 
      //here you will know the exact cell, now you can hide or show your buttons 
     } 
    } 
} 
+0

你能舉個例子嗎? –

+0

@Eathan謝謝,我將在這裏嘗試這 –

2

有很多方法可以做到這一點。一個可能的解決方案是使用塊。 添加這ScrollCell

var didLikedTapped: (() -> Void)? 

,並在細胞

@IBAction func LikeBtn(sender: AnyObject) { 
    didLikedTapped?() 
} 

收到LikedButton的情況下,然後在的viewController中的cellForRowAtIndexPath添加此

cell.didLikedTapped = {[weak self] in 
    print(IndexPath) 
} 
相關問題