2017-12-17 3 views
0

Ich habe untersucht, wie ich meine eigene benutzerdefinierte Dezimal-Tastatur in eine UIView einbetten. Ich habe unter Bild gefunden, das ich neu erstellen möchte. Aber ich bin mir nicht sicher, wie und was der beste Weg ist, um damit zu beginnen? ist es nur, um mehrere UIButton zu erstellen und dann in einer Methode zu behandeln, oder gibt es eine intelligente Möglichkeit, diese neu zu erstellen?Einbetten von benutzerdefinierten Tastatur in uiview

enter image description here

Antwort

1

Ein CollectionView ist eine gute Möglichkeit, dies zu tun. Erstellen Sie ein neues Storyboard, legen Sie einen UICollectionViewController dort ein. Erstellen Sie dann eine UICollectionViewCell mit einem UILabel (für Ziffern und einen Punkt) und einem UIImage (für den Löschen-Button).

Hier ist mein UICollectionViewController Code hierfür:

import UIKit 

    protocol KeypadDelegate: class { 
    func did(tapOnKeypad key: KeypadKey) 
} 

enum KeypadKey { 
    case number (value: Int) 
    case backspace 
} 

class KeypadViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout { 

    // MARK: - Properties. 

    weak var delegate: KeypadDelegate? 

    // MARK: - Lifecycle. 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     collectionView?.register(cellReuseID: KeypadCVCell.reuseID) 
    } 

    // MARK: - UICollectionView DataSource. 

    override func numberOfSections(in collectionView: UICollectionView) -> Int { 
     return 1 
    } 

    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return 12 
    } 

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "KeypadCVCell", for: indexPath) as! KeypadCVCell 

     switch indexPath.row { 
     case 0...8: 
      cell.configure(number: String(indexPath.row + 1)) 
     case 9: 
      cell.setBlank() 
     case 10: 
      cell.configure(number: "0") 
     case 11: 
      let image = UIImage(named: "btn_keypad_backspace") 
      cell.configure(image: image) 
     default: 
      break 
     } 

     return cell 
    } 

    // MARK: - UICollectionView Delegate. 

    override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
     switch indexPath.row { 
     case 0...8: 
      let key: KeypadKey = .number(value: indexPath.row + 1) 
      delegate?.did(tapOnKeypad: key) 
     case 9: 
      break 
     case 10: 
      let key: KeypadKey = .number(value: 0) 
      delegate?.did(tapOnKeypad: key) 
     case 11: 
      delegate?.did(tapOnKeypad: .backspace) 
     default: 
      break 
     } 
    } 

    // MARK: - UICollectionView Delegate FlowLayout. 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
     let width = collectionView.bounds.width/3 
     let height = collectionView.bounds.height/4 
     return CGSize(width: width, height: height) 
    } 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { 
     return 0 
    } 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { 
     return 0 
    } 

} 

class KeypadCVCell: UICollectionViewCell { 

    // MARK: - Outlets. 

    @IBOutlet weak var numberLabel: UILabel! 
    @IBOutlet weak var backspaceImageView: UIImageView! 

    // MARK: - Configuration. 

    func configure(number: String) { 
     self.numberLabel.text = number 
     self.backspaceImageView.isHidden = true 
    } 

    func configure(image: UIImage?) { 
     self.numberLabel.isHidden = true 
     self.backspaceImageView.image = image 
    } 

    func setBlank() { 
     self.numberLabel.isHidden = true 
     self.backspaceImageView.isHidden = true 
    } 

} 
+0

Große u könnte die KeypadCVCell als gut schreiben :-) nur für das Verständnis der 'cellFOrItemAt' –

+0

meinem Beitrag hinzugefügt. – Demosthese

0

Erstellen Sie eine einzelne UIButton Aktion Steckdose, schließen Sie alle Tasten, um es, überprüfen Sie den Absender Titel Wert, wandelt es in Int, wenn nicht möglich, es das Komma ist oder wenn Titeltext leer ist es die Backspace. Oder erstellen Sie eine separate Funktion für die Rücktaste. Das wäre eine relativ einfache, durcheinander liegende Methode und würde nicht viel mehr als ein Dutzend Zeilen Code benötigen.

Verwandte Themen