uitableview - কীভাবে বাটন ট্যাগ ব্যবহার করে একটি কাস্টম সেলের কন্টেন্ট অ্যাক্সেস করবেন?




swift uibutton (5)

Cao এর উত্তরের ভিত্তিতে, এখানে একটি সংগ্রহ ভিউ সেলটিতে বোতামগুলি হ্যান্ডেল করার জন্য একটি সমাধান দেওয়া হয়েছে।

    @IBAction func actionButton(sender: UIButton) {
        let point = collectionView.convertPoint(sender.center, fromView: sender.superview)
        let indexPath = collectionView.indexPathForItemAtPoint(point)
}

কনভার্ট পয়েন্ট () ফাংশন কল সংগ্রহ ভিউ স্পেসে বোতাম পয়েন্ট স্থানাঙ্কগুলিকে অনুবাদ করবে সে বিষয়ে সচেতন থাকুন। ছাড়া , সূচীপথ সর্বদা 0 একই সেল নম্বরটি উল্লেখ করে

আমার একটি অ্যাপ্লিকেশন রয়েছে যা কাস্টম ঘরে একটি কাস্টম বোতাম রয়েছে। আপনি যদি ঘরটি নির্বাচন করেন তবে এটি বিশদ দৃষ্টিতে পৃথক হয়, যা নিখুঁত। যদি আমি কোনও ঘরে একটি বোতাম নির্বাচন করি তবে নীচের কোডটি কনসোলটিতে ঘর সূচি মুদ্রণ করে।

আমাকে নির্বাচিত ঘরের সামগ্রীগুলি (বোতামটি ব্যবহার করে) অ্যাক্সেস করতে হবে এবং সেগুলি একটি অ্যারে বা অভিধানে যুক্ত করতে হবে। ঘরের সামগ্রীতে কীভাবে অ্যাক্সেস করা যায় তা খুঁজে বের করার জন্য আমি এতটা সংগ্রাম করে আমি নতুন। আমি didselectroatindexpath ব্যবহার করার চেষ্টা করেছি, তবে আমি কীভাবে সূচকটিকে ট্যাগের মতো হতে বাধ্য করব তা আমি জানি না ...

সুতরাং মূলত, যদি প্রতিটি কক্ষে 'কুকুর', 'ক্যাট', 'পাখি' সহ সেল রয়েছে each অ্যারে / অভিধানে 'কুকুর' এবং 'পাখি' যুক্ত করুন।

    // MARK: - Table View

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

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return postsCollection.count
}

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

    let cell: CustomCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomCell

    // Configure the cell...
    var currentRepeat = postsCollection[indexPath.row]
    cell.repeatLabel?.text = currentRepeat.product
    cell.repeatCount?.text = "Repeat: " + String(currentRepeat.currentrepeat) + " of " + String(currentRepeat.totalrepeat)

    cell.accessoryType = UITableViewCellAccessoryType.DetailDisclosureButton

    cell.checkButton.tag = indexPath.row;

    cell.checkButton.addTarget(self, action: Selector("selectItem:"), forControlEvents: UIControlEvents.TouchUpInside)


    return cell

}

func selectItem(sender:UIButton){

    println("Selected item in row \(sender.tag)")

 }

আমি সুইস্ট 3 এর জন্য ভাসিল গারভের উত্তরটির 1 বিকল্প আপডেট করেছি

1. আপনার CustomCell জন্য একটি প্রোটোকল তৈরি করুন:

protocol CustomCellDelegate {
    func cellButtonTapped(cell: CustomCell)
} 

২. আপনার TableViewCell জন্য কোনও delegate ভেরিয়েবল ঘোষণা করুন এবং এতে প্রোটোকল পদ্ধতিটি কল করুন:

var delegate: CustomCellDelegate?

@IBAction func buttonTapped(sender: AnyObject) {
    delegate?.cellButtonTapped(self)
}

৩. আপনার tableView ক্লাসে tableView সাথে tableView :

 class ViewController: CustomCellDelegate

৪. আপনার ঘরের delegate সেট করুন

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)  as CustomCell
    cell.delegate = self

    return cell
}

5. আপনার ViewController প্রয়োজনীয় পদ্ধতিটি প্রয়োগ করুন।


এক্সকোড 8: গুরুত্বপূর্ণ নোট

ট্যাগগুলি 0 এর চেয়ে আলাদা মানটিতে সেট করতে ভুলবেন না।

যদি আপনি ট্যাগ = 0 দিয়ে কোনও বস্তু কাস্ট করার চেষ্টা করেন তবে এটি কাজ করতে পারে তবে কিছু অদ্ভুত ক্ষেত্রে তা হয় না।

ট্যাগটি বিভিন্ন মানগুলিতে ট্যাগ সেট করতে হয়। আশা করি এটি কাউকে সাহায্য করবে।


বিকল্প 1. প্রতিনিধি দলের সাথে এটি পরিচালনা করা

আপনার ঘরের সাবভিউ থেকে বরখাস্ত ইভেন্টগুলি পরিচালনা করার সঠিক উপায় হ'ল প্রতিনিধি ব্যবহার করা।

সুতরাং আপনি পদক্ষেপগুলি অনুসরণ করতে পারেন:

1. আপনার শ্রেণীর সংজ্ঞার উপরে আপনার কাস্টম সেলের অভ্যন্তরে একক উদাহরণ পদ্ধতি সহ একটি প্রোটোকল লিখুন:

protocol CustomCellDelegate {
    func cellButtonTapped(cell: CustomCell)
} 

২. আপনার শ্রেণীর সংজ্ঞার ভিতরে একটি প্রতিনিধি পরিবর্তনশীল ঘোষণা করুন এবং প্রতিনিধিটির উপরে প্রোটোকল পদ্ধতিটি কল করুন:

var delegate: CustomCellDelegate?

@IBAction func buttonTapped(sender: AnyObject) {
    delegate?.cellButtonTapped(self)
}

৩. যেখানে আপনার টেবিলের দর্শন রয়েছে সেই শ্রেণিতে কাস্টমসিলিলেটকে মেনে চলুন:

 class ViewController: CustomCellDelegate

৪. আপনার ঘরের প্রতিনিধি সেট করুন

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as CustomCell
    cell.delegate = self

    return cell
}

৫. আপনার ভিউ কন্ট্রোলার ক্লাসে প্রয়োজনীয় পদ্ধতিটি কার্যকর করুন।

সম্পাদনা: প্রথমে একটি খালি অ্যারের সংজ্ঞা দিন এবং তারপরে এটি সংশোধন করুন:

private var selectedItems = [String]()

func cellButtonTapped(cell: CustomCell) {
    let indexPath = self.tableView.indexPathForRowAtPoint(cell.center)!
    let selectedItem = items[indexPath.row]

    if let selectedItemIndex = find(selectedItems, selectedItem) {
        selectedItems.removeAtIndex(selectedItemIndex)
    } else {
        selectedItems.append(selectedItem)
    }
}

আইটেমগুলি যেখানে আমার দর্শন নিয়ন্ত্রকের সংজ্ঞায়িত অ্যারে হয়:

private let items = ["Dog", "Cat", "Elephant", "Fox", "Ant", "Dolphin", "Donkey", "Horse", "Frog", "Cow", "Goose", "Turtle", "Sheep"] 

বিকল্প 2. ক্লোজারগুলি ব্যবহার করে এটি পরিচালনা করা

আমি ফিরে এসে সিদ্ধান্ত নিয়েছি যে এই ধরণের পরিস্থিতিগুলি পরিচালনা করার অন্য উপায় another এক্ষেত্রে একটি ক্লোজার ব্যবহারের ফলে কম কোড আসবে এবং আপনি আপনার লক্ষ্য অর্জন করবেন।

1. আপনার সেল শ্রেণীর অভ্যন্তরে একটি ক্লোজার ভেরিয়েবল ঘোষণা করুন:

var tapped: ((CustomCell) -> Void)?

2. আপনার বোতাম হ্যান্ডলারের অভ্যন্তরে বন্ধটি আহ্বান করুন।

@IBAction func buttonTapped(sender: AnyObject) {
    tapped?(self)
}

tableView(_:cellForRowAtIndexPath:) ভিউ নিয়ন্ত্রক শ্রেণিতে tableView(_:cellForRowAtIndexPath:) :

let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CustomCell       
cell.tapped = { [unowned self] (selectedCell) -> Void in
    let path = tableView.indexPathForRowAtPoint(selectedCell.center)!
    let selectedItem = self.items[path.row]

    println("the selected item is \(selectedItem)")
}

@IBAction func buttonTap(sender: UIButton) {
        let button = sender as UIButton
        let indexPath = self.tableView.indexPathForRowAtPoint(sender.center)!
}




tableviewcell