【问题标题】:Custom Cell error addTarget button自定义单元格错误 addTarget 按钮
【发布时间】:2014-12-31 09:39:38
【问题描述】:

我创建了如下布局:在storyborad 中,我有一个包含表格视图的视图,并且我关联了TableViewController 类。然后,我创建了一个带有自定义单元格的新视图,并为其分配了类 CustomCell

我在尝试为按钮分配操作时遇到问题。由于各种原因,我需要在 TableViewController 中分配操作。

这是我的代码:

这是自定义单元:

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.")

    }
}

这是我的 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”)
    }

当我运行它时,给我一个错误:

*** 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) 

【问题讨论】:

    标签: ios swift tableview


    【解决方案1】:

    这不起作用的原因是因为您将委托设置为“cellCustom”而不是视图控制器。 替换这一行:

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

    有了这个:

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

    【讨论】:

    • 确保冒号在set中,buttonAction:
    • 对不起,我不明白,你能解释一下吗?
    • 好的,我明白我很抱歉。它有效,你能解释一下为什么这两点吗?
    • 冒号是必需的,因为在执行操作时,您希望收到一个 Sender 对象,您的情况是按钮。 buttonAction(sender:UIButton!)
    • 感谢您的帮助!
    【解决方案2】:

    试试这个,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-07
      • 2016-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多