2015-05-25 151 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 
    } 
相关问题