2016-10-13 10 views
0

私は、親クラスCreateEventから継承するサブクラスCustomCellを持っています。サブクラスは、CreateEvent Viewコントローラにあるテーブルビューセルの個々のセルを記述します。ある特定のセルでは、CustomCellファイルにリンクされているテキストフィールドがありますが、ユーザーがテキストフィールドに入ると、そのテキストフィールドから値を取得するのに問題があります。私はまた、外のタッチとリターンキーを押すと、キーボードを却下する問題がありますが、私は主にテキストフィールドからテキストを取得に焦点を当てています。私はこれらの機能を1つの通常のスウィフトファイルで行うことに精通していますが、これはサブクラスと2つのすばやいファイルなので、何をすべきかわかりません。これは私のコードです:CustomCellファイルを使用してテキストフィールド値を取得する

class CustomCell: UITableViewCell, UITextFieldDelegate { 

@IBOutlet weak var entranceFeeTextField: UITextField! 

override func awakeFromNib() { 
    super.awakeFromNib() 

} 

override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 
} 

class CreateEventVC: UIViewController, UITableViewDelegate, UITableViewDataSource, CustomCellDelegate, UITextFieldDelegate { 

override func viewDidLoad() { 
} 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let currentCellDescriptor = getCellDescriptorForIndexPath(indexPath) 
    let cell = tableView.dequeueReusableCell(withIdentifier: currentCellDescriptor["cellIdentifier"] as! String, for: indexPath) as! CustomCell 

// the following code describes the array for an expandable drop down 
if currentCellDescriptor["cellIdentifier"] as! String == "idCellNormal" { 
    if let primaryTitle = currentCellDescriptor["primaryTitle"] { 
     cell.textLabel?.text = primaryTitle as? String 
    } 

    eventType = ((cellDescriptors[0] as! NSMutableArray)[0] as! NSDictionary)["primaryTitle"]! as! String 
    if let secondaryTitle = currentCellDescriptor["secondaryTitle"] { 
     cell.detailTextLabel?.text = secondaryTitle as? String 
    } 
} 
else if currentCellDescriptor["cellIdentifier"] as! String == "idCellTextfield" { 
    cell.textField.placeholder = currentCellDescriptor["primaryTitle"] as? String 
} 


else if currentCellDescriptor["cellIdentifier"] as! String == "idCellValuePicker" { 
    cell.textLabel?.text = currentCellDescriptor["primaryTitle"] as? String 
} 

cell.delegate = self 

return cell 
} 


func textFieldShouldEndEditing(textField:UITextField) -> Bool { 
entranceFeeAmount = cell.entranceFeeTextField.text! 

return true; 
} 

} 

私はentranceFeeTextFieldの値をプリントアウトすることができませんので、私の主な質問は、私は適切にUITextFieldの代表者に準拠していますかどうかです。私は私の問題を解決する答えを得ることができなかった、または私が理解できる問題を解決することができなかった。

+0

直接あなたはyou'r現在のビューコントローラ内のデリゲートメソッドを使用するcellForRowAtで現在のビューコントローラにUITextFieldのためのデリゲートを設定する必要が –

+0

textFieldShouldEndEditing方法で「entranceFeeAmount = textField.text」を書くことができます。 –

+0

@yagneshdobariya IBOutletをCreateEventVCに設定していないため、コード行がentranceFeeTextFieldを認識できないため、私はそれを行うことができません。私はそれをCustomCellファイルにリンクさせました – Kevin

答えて

0

ただ、それはクラスがCustomCell

cell.entranceFeeTextField.delegate = self 

ですがcellあなたのようにあなたのテキストフィールドにセレクタメソッドを追加する必要があり、正しい識別子と正しいクラス

+0

cell.entranceFeeTextField.delegateのセルは正確に何ですか?私のコードでは、私は次のように設定しました。let cell = tableView.dequeueReusableCell(withIdentifier:currentCellDescriptor ["cellIdentifier"]! CustomCell – Kevin

+0

@ Kevinので、その代理人をテキストフィールドに設定しましたか? – xmhafiz

+0

cellForRowAtIndexPathにcell.entranceFeeTextField.delegate = selfを入れたときにエラーが出ました – Kevin

0

を持っていることを確認し、細胞内のテキストフィールドにデリゲートを割り当て以下。

txtEntrance.addTarget(self, action:#selector(textFieldEndEditings(sender:)), for:.editingDidEnd) 

func textFieldEndEditings(sender:UITextField) -> Void 
{ 
    print(sender.text) 
} 
+0

どのファイルにこのコードを入れますか?このセレクタメソッドは何をしますか? – Kevin

+0

このセレクタメソッドをカスタムクラスに入れます。このセレクタはあなたのテキストフィールドが編集を終了する間に呼び出されました。 – KKRocks

+0

また、このセレクタメソッドをtableViesのcellForRowAtIndexPathに追加することもできます。 – KKRocks

関連する問題