2016-06-23 14 views
2

私はUITableview内で動的セルを使用しています。UITableViewCell内の数字パッドで表示される完了ボタンを作成しようとしています。UITableViewCell内の数字パッドに完了ボタンを追加

他のフィールドのViewController内でこれを達成するコードがありますが、これはUITableViewCell内のフィールドでは機能しません。

IBOuletはここにある:どちらかの許可

import UIKit 

class DiveDetailsViewController: UITableViewController, LocationDelegate, ItemDataSelectedProtocol 
{ 

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

// DONE button on NumberPad for StartingPressure 
func addDoneButtonOnKeyboardStartingPressure() 
{ 
    let doneToolbar: UIToolbar = UIToolbar(frame: CGRectMake(0, 0, 320, 50)) 
    doneToolbar.barStyle = UIBarStyle.Default 

    let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) 
    let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: self, action: #selector(DiveDetailsViewController.addDoneButtonOnKeyboardStartingPressure)) 

    var items = [UIBarButtonItem]() 
    items.append(flexSpace) 
    items.append(done) 

    doneToolbar.items = items 
    doneToolbar.sizeToFit() 

    self.startingPressureTextField.inputAccessoryView = doneToolbar 
} 

func doneButtonActionDuration() 
{ 
    self.startingPressureTextField.resignFirstResponder() 
} // finish DONE button on NumberPad for StartingPressure 

私は取得していますエラーがある"Value to type 'DiveDetailsViewController' has no member 'startingPressureTextField'"

は、誰かが私を助けてください。私は私のViewControllerに設定している

class StartingTankUsageCell: UITableViewCell, UITextFieldDelegate 
{ 

    @IBOutlet var startingPressureTextField: UITextField! 

UITableViewCellでUITextFieldを表示するか、UITableViewCell内に存在する完了ボタンを手伝ってください。

答えて

4

あなたはこのようにUITextFieldのための拡張を行うことができます。

extension UITextField { 

    public override func awakeFromNib() { 
     super.awakeFromNib() 
     self.addHideinputAccessoryView() 
    } 

    func addHideinputAccessoryView() { 

     let button = UIButton(frame: CGRect(x: 0,y: 0,width: 50,height: 44)) 
     button.setTitle("Done", forState: .Normal) 
     button.setTitleColor(UIColor.blueColor(), forState: .Normal) 
     button.setTitleColor(UIColor.lightGrayColor(), forState: .Highlighted) 
     button.titleLabel?.font = UIFont.systemFontOfSize(14) 
     button.addTarget(self, action: #selector(self.resignFirstResponder), forControlEvents: .TouchUpInside) 


     let barButton = UIBarButtonItem(customView: button) 
     let space = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: self, action: nil) 
     let toolbar = UIToolbar(frame: CGRectMake(0, 0, self.frame.size.width, 44)) 

     toolbar.items = [space, barButton] 
     self.inputAccessoryView = toolbar 
    } 

} 
+0

ありがとうございました、私はこれを追加StartingTankUsageCell、しかし、私は "ファイルのスコープでのみ有効な宣言"エラーを取得しています私は様々な変更を試みたが、行っていません –

+0

これをあなたのセルにどのように追加しましたか?この拡張子をセル –

+0

の外に追加してみてください。しかし、私は多くの未解決の識別子を持っていました。 –

2

をまたコードを少し単純化し、このようにそれを試みることができる:

import UIKit 
import Foundation 

extension UITextField { 

    func addHideinputAccessoryView() { 

     let toolbar = UIToolbar() 
     toolbar.sizeToFit() 
     let item = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, 
            target: self, action: #selector(self.resignFirstResponder)) 
     toolbar.setItems([item], animated: true) 

     self.inputAccessoryView = toolbar 
    } 

} 
+0

ありがとうNirri。 「完了」ボタンや数字パッドを外すために押すオブジェクトはありません –

+0

面白いです。私のシミュレータ(ios 9.3)で動作します。 – Nirri

関連する問題