简体   繁体   中英

Custom Cell error addTarget button

I created a layout as follows: in storyborad I have a view that contains a table view and I associate the Class TableViewController . Then I created a new View with a custom cell and assigned to it the class CustomCell .

I have problems when I try to assign an action to the button. For various reasons I need to assign the action in TableViewController.

This is my code:

This is CustomCell:

class CustomCategoryTableViewCell:UITableViewCell {

    @IBOutlet weak var customButton: UIButton!
    @IBOutlet weak var title: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()

    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
        println("Cell is selected.")

    }
}

And this is my TableViewController:

 override func viewDidLoad() {
            super.viewDidLoad()

            // Register custom cell
            var nib = UINib(nibName: "CategoryCell", bundle: nil)
            tableView.registerNib(nib, forCellReuseIdentifier: "CustomCellCategory")

      …more code
        }


        override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            println("numero rihe \(myArray.count)")
            return myArray.count
        }

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

            let cellCustom:CustomCategoryTableViewCell = tableView.dequeueReusableCellWithIdentifier("CustomCellCategory") as CustomCategoryTableViewCell

            // Button
            cellCustom.customButton.tag = indexPath.row

            println("current level: \(myArray[indexPath.row].level)")

            if (myArray[indexPath.row].level > 0){
             var puppy=""

             for (var i = 0; i < myArray[indexPath.row].level; i++){
                puppy += "  "
             }
                cellCustom.title.text = "\(puppy)-\(myArray[indexPath.row].nameCategory)"
            }else{
                cellCustom.title.text = myArray[indexPath.row].nameCategory
            }

            // Setto button aperto/chiuso
            if (myArray[indexPath.row].isOpen){

                var image = UIImage(named: "item-icon-folder.png");
                cellCustom.customButton.setBackgroundImage(image, forState: UIControlState.Normal)

            }else{

                var image = UIImage(named: "item-icon-folder-selected.png");
                cellCustom.customButton.setBackgroundImage(image, forState: UIControlState.Normal)
            }

            //cellCustom.customButton(cellCustom, action:"searchChild", forControlEvents: UIControlEvents.TouchUpInside)


            // Nascondo Button.
            if (!myArray[cellCustom.customButton.tag].hasChild){
                print("Non ha figli")
                cellCustom.customButton.hidden = true

                var image = UIImage(named: "item-counter.png");
                cellCustom.customButton.setBackgroundImage(image, forState: UIControlState.Normal)
            }
            cellCustom.customButton.addTarget(cellCustom, action: "buttonAction", forControlEvents: UIControlEvents.TouchUpInside)

            cellCustom.title.numberOfLines = 3
            cellCustom.title.lineBreakMode = .ByWordWrapping

            return cellCustom
        }


        func buttonAction(sender:UIButton!) {
    println(“tapped”)
    }

When i run this, get me a error:

*** First throw call stack:
(
    0   CoreFoundation                      0x000000010c574f35 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x000000010e0b8bb7 objc_exception_throw + 45
    2   CoreFoundation                      0x000000010c57c04d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3   CoreFoundation                      0x000000010c4d427c ___forwarding___ + 988
    4   CoreFoundation                      0x000000010c4d3e18 _CF_forwarding_prep_0 + 120
    5   UIKit                               0x000000010ce018be -[UIApplication sendAction:to:from:forEvent:] + 75
    6   UIKit                               0x000000010cf08410 -[UIControl _sendActionsForEvents:withEvent:] + 467
    7   UIKit                               0x000000010cf077df -[UIControl touchesEnded:withEvent:] + 522
    8   UIKit                               0x000000010d1ae540 _UIGestureRecognizerUpdate + 9487
    9   UIKit                               0x000000010ce46ff6 -[UIWindow _sendGesturesForEvent:] + 1041
    10  UIKit                               0x000000010ce47c23 -[UIWindow sendEvent:] + 667
    11  UIKit                               0x000000010ce149b1 -[UIApplication sendEvent:] + 246
    12  UIKit                               0x000000010ce21a7d _UIApplicationHandleEventFromQueueEvent + 17370
    13  UIKit                               0x000000010cdfd103 _UIApplicationHandleEventQueue + 1961
    14  CoreFoundation                      0x000000010c4aa551 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    15  CoreFoundation                      0x000000010c4a041d __CFRunLoopDoSources0 + 269
    16  CoreFoundation                      0x000000010c49fa54 __CFRunLoopRun + 868
    17  CoreFoundation                      0x000000010c49f486 CFRunLoopRunSpecific + 470
    18  GraphicsServices                    0x000000011066b9f0 GSEventRunModal + 161
    19  UIKit                               0x000000010ce00420 UIApplicationMain + 1282
    20  XMLParser-Tutorial                  0x000000010c24056e top_level_code + 78
    21  XMLParser-Tutorial                  0x000000010c2405aa main + 42
    22  libdyld.dylib                       0x000000010e892145 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

The reason this is not working is because you are setting the delegate as "cellCustom" and not as the view controller. Replace this line:

cellCustom.customButton.addTarget(cellCustom, action: "buttonAction", forControlEvents: UIControlEvents.TouchUpInside)

With this:

cellCustom.customButton.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)

只需尝试一下,

cellCustom.customButton.addTarget(self, action: "mybuttonAction:", forControlEvents: UIControlEvents.TouchUpInside)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM