2015-05-25 66 views
0

我有一個包含tableview的視圖控制器,這個tableview包含在storyboard中完成的動態單元格。大多數單元格包含一個文本框,並且在視圖控制器中,我需要檢測文本框何時被選中以及它是哪個單元格。 (我加載指向單元格的彈出窗口,並且這必須從視圖控制器中調用)。如何知道tableview中的哪個單元格已被選中

單元代碼

import UIKit 

class AddNew_Date_Cell: UITableViewCell { 

    @IBOutlet var Label: UILabel! 
    @IBOutlet var textField: UITextField! 

    func loadItem(var data:NSArray) { 
     Label.text = data[0] as? String 
    } 
} 

ViewControllerCode

import UIKit 

class AddNewDetailView: UIViewController, UITableViewDelegate, UITableViewDataSource, UIPopoverPresentationControllerDelegate, UITextFieldDelegate { 


    @IBOutlet var tableView: UITableView! 

    var items : NSMutableArray! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return UITableViewAutomaticDimension 
    } 

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return UITableViewAutomaticDimension 
    } 

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

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

     switch(items[indexPath.row][1] as! Int) 
     { 
      ... 

      case 2: 
      var cell:AddNew_Date_Cell = tableView.dequeueReusableCellWithIdentifier("AN_Date_Cell") as! AddNew_Date_Cell 
      cell.loadItem(items[indexPath.row] as! NSArray, view: self) 
      cell.textField.delegate = self 
      return cell 

       ... 
     } 
    } 

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    } 

    func textFieldShouldBeginEditing(textField: UITextField) -> Bool { 
     //Need to know here which cell the textfield is attached to 
     turn true 
    } 
} 

每次我選擇我打一個斷點「textFieldShouldBeginEditing」一個文本框觀點,但是我不知道哪個單元的英寸

如果我選擇單元格中的textfield「didSelectRowAtIndexPath」永遠不會被命中。

我如何知道哪個單元格已被選中。

感謝

+0

你最近怎麼樣使用這些信息? (選擇哪個單元格)?不同的方法,無論你需要獲取單元格的NSIndexPath還是indexPath.row來操作你的項目數組 – Dustin

+0

我將把數據拉出單元格(當前文本值)並加載指向它的彈出窗口 –

+0

「彈出窗口指向」你的意思是加載一個「視覺上」指向單元格的popover? – Dustin

回答

0

您需要設置與用戶的交互關閉,而文本字段沒有被編輯,在的cellForRowAtIndexPath加入這一行

cell.textField.userInteractionEnabled = false 

在didSelectRowAtIndexPath方法,您將需要再次版啓用否則用戶不會對德勤,如果他們想和調用第一響應:

​​

一旦文本用戶完成編輯FieldShouldEndEditing您再次禁用的互動:

cell.textField.userInteractionEnabled = false 

這種方式的cellForRowAtIndexPath總會被調用,但將是由你來設置用戶使用正確的UITextField。

我希望幫助你

0

你可以使用一個自定義單元格類的委託協議,讓你知道當一個文本字段開始編輯。

自定義單元格將是文本字段的委託,並且視圖控制器將是自定義單元格的委託。

對於一個簡單的例子,你的小區類別如下所示:如果你想找出

extension ViewController: TextFieldCellDelegate { 
    func textFieldCellDidBeginEditing(cell: TextFieldCell) { 
     println(cell) 
     // Do something with cell 
    } 
} 
0

import UIKit 

protocol TextFieldCellDelegate { 
    func textFieldCellDidBeginEditing(cell: TextFieldCell) 
} 

class TextFieldCell: UITableViewCell { 

    @IBOutlet weak var textField: UITextField! 
    var delegate: TextFieldCellDelegate? 
} 

extension TextFieldCell: UITextFieldDelegate { 
    func textFieldDidBeginEditing(textField: UITextField) { 
     delegate?.textFieldCellDidBeginEditing(self) 
    } 
} 

而且您的視圖控制器將實現這樣的方法你的單元格的索引在func中寫下面的代碼textFieldShouldBeginEditing(textField:UITextField)

var index = 0 
    var position: CGPoint = textField.convertPoint(CGPointZero, toView: self.<your_table_outlet_name>) 
    if let indexPath = self.<your_table_outlet_name>.indexPathForRowAtPoint(position) 
    { 
     index = indexPath.row 
    } 
相關問題