2014-11-04 24 views
0

我創建一個佈局,如下所示:在storyborad我有一個包含一個表視圖的圖,我關聯的類TableViewController。然後我創建了一個帶有自定義單元格的新視圖,並將其分配給類CustomCell自定單元錯誤addTarget按鈕

我嘗試將操作分配給按鈕時出現問題。由於各種原因,我需要在TableViewController中分配操作。

這是我的代碼:

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

    } 
} 

這是我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) 

回答

3

這不起作用的原因是因爲您將代理設置爲「cellCustom」而不是視圖控制器。 替換此行:

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

有了這個:

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

我已經嘗試過這一點,但讓我同樣的錯誤.. – uynva 2014-11-04 13:29:11

+0

確保冒號是在設置,buttonAction: – Reedy 2014-11-04 13:30:29

+0

對不起,我不明白,你能解釋一下嗎? – uynva 2014-11-04 13:35:09

0

只是試試這個,

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