ios - সেল থেকে বাটন ক্লিক করে UITableViewCell এর সূচিপত্র পান




uibutton swift2 (6)

UIButton এর একটি কাস্টম ক্লাস তৈরি করুন এবং এটির মতো সঞ্চিত সম্পত্তি ঘোষণা করুন এবং কলফ্ররোআউটআইডেক্সপথ থেকে নির্ধারিত সূচকপথটি পুনরুদ্ধার করতে এটি ব্যবহার করুন।

class VUIButton: UIButton {
    var indexPath: NSIndexPath = NSIndexPath()
}

এটি সম্পূর্ণ প্রমাণ সমাধান যা আপনার ইনডেক্সপথ কোনও অবস্থাতেই কখনও ভুল হতে পারে না। একবার চেষ্টা করুন।

UITableViewCell আমার একটি বাটন রয়েছে (লাল রঙের ক্রস) এবং সেই UITableViewCell ক্লিকের উপরে আমি indexPath পেতে চাই।

এই মুহুর্তে আমি এই cell.closeButton.tag = indexPath.section এবং বোতামের ক্লিকের মতো প্রতিটি বোতামে ট্যাগ অর্পণ করছি আমি indexPath.section মানটি এর মতো indexPath.section :

@IBAction func closeImageButtonPressed(sender: AnyObject) {
  data.removeAtIndex(sender.tag)
  tableView.reloadData()
}

এটি কি বাস্তবায়নের সঠিক উপায় বা এটি করার জন্য অন্য কোনও পরিষ্কার উপায় নেই?


আপনার সেলফোর্ডে:

#import <objc/runtime.h>

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    setAssociatedObject(object: YOURBUTTON, key: KEYSTRING, value: indexPath)
}

@IBAction func closeImageButtonPressed(sender: AnyObject) {
    let val = getAssociatedObject(object: sender, key: KEYSTROKING)
}

এখানে ভাল হল আপনার সূচকপথ অবজেক্ট, আপনি যে কোনও বস্তু পাস করতে পারবেন যেমন আপনি পাস সেল অবজেক্টকে বরাদ্দ করতে পারেন এবং এটি বোতাম ক্রিয়ায় পেতে পারেন।


এটা চেষ্টা কর:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var cell = (tableView.dequeueReusableCell(withIdentifier: "MainViewCell", forIndexPath: indexPath) as! MainTableViewCell)
    cell.myButton().addTarget(self, action: Selector("myClickEvent:event:"), forControlEvents: .touchUpInside)
    return cell
}

এই ফাংশনটি সারি ক্লিকের অবস্থান পান

@IBAction func myClickEvent(_ sender: Any, event: Any) {
    var touches = event.allTouches()!
    var touch = touches.first!
    var currentTouchPosition = touch.location(inView: feedsList)
    var indexPath = feedsList.indexPathForRow(atPoint: currentTouchPosition)!
    print("position:\(indexPath.row)")
}

কীভাবে সেল ইনডেক্সপথটি বোতাম নির্বাচকের সাথে সুইফট 4-এ ট্যাপিং বোতামের জন্য পাবেন

@objc func buttonClicked(_sender:UIButton){

 let buttonPosition = sender.convert(CGPoint.zero, to: self.tableView)
 let indexPath = self.tableView.indexPathForRow(at:buttonPosition)
 let cell = self.tableView.cellForRow(at: indexPath) as! UITableViewCell
 print(cell.itemLabel.text)//print or get item
}

সুইফ্ট 4-এ, কেবল এটি ব্যবহার করুন:

ফানক বোতামটি ট্যাপড (_ প্রেরক: ইউআইবাটন) {

let buttonPostion = sender.convert(sender.bounds.origin, to: tableView)

if let indexPath = tableView.indexPathForRow(at: buttonPostion) {
    let rowIndex =  indexPath.row
}

}


সুইফ্ট ক্লোজারগুলির সর্বোত্তম ব্যবহারের সাথে চেষ্টা করুন: সাধারণ, দ্রুত এবং সহজ।

সেলফোর্ডআউটইন্ডেক্সপথ পদ্ধতিতে:

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

cell.btnTick.mk_addTapHandler { (btn) in
     print("You can use here also directly : \(indexPath.row)")
     self.btnTapped(btn: btn, indexPath: indexPath)
}

সেলফোর্ডআউটইন্ডেক্সপথ পদ্ধতির বাইরে বাহ্যিক ব্যবহারের জন্য নির্বাচক পদ্ধতি:

func btnTapped(btn:UIButton, indexPath:IndexPath) {
    print("IndexPath : \(indexPath.row)")
}

ইউআইবাটনটির জন্য এক্সটেনশন:

extension UIButton {

    private class Action {
        var action: (UIButton) -> Void

        init(action: @escaping (UIButton) -> Void) {
            self.action = action
        }
    }

    private struct AssociatedKeys {
        static var ActionTapped = "actionTapped"
    }

    private var tapAction: Action? {
        set { objc_setAssociatedObject(self, &AssociatedKeys.ActionTapped, newValue, .OBJC_ASSOCIATION_RETAIN) }
        get { return objc_getAssociatedObject(self, &AssociatedKeys.ActionTapped) as? Action }
    }


    @objc dynamic private func handleAction(_ recognizer: UIButton) {
        tapAction?.action(recognizer)
    }


    func mk_addTapHandler(action: @escaping (UIButton) -> Void) {
        self.addTarget(self, action: #selector(handleAction(_:)), for: .touchUpInside)
        tapAction = Action(action: action)

    }
}




swift2