簡體   English   中英

如何在.DecimalPad iOS鍵盤上添加減號?

[英]How to add a minus sign to the .DecimalPad iOS keyboard?

如何從下面的鏈接向應用程序的.DecimalPad類型iOS鍵盤添加減號? 如果我錯了,請糾正我,但這對我而言似乎不是自定義鍵盤,它看起來像是蘋果公司給我的默認十進制鍵盤...

帶有減號的十進制鍵盤

要向鍵盤添加一些鍵,請打開KeyboardViewController.swift並進行以下更改。

在viewDidLoad()中,在下一個鍵盤按鈕的代碼之后的函數底部添加以下內容。

let buttonTitles = ["-"]
var buttons = createButtons(buttonTitles)
var topRow = UIView(frame: CGRectMake(0, 0, 320, 40))

for button in buttons {
    topRow.addSubview(button)
}

self.view.addSubview(topRow)

addConstraints(buttons, containingView: topRow)

接下來添加下面的函數,該函數將創建帶有傳遞到其中的字符串標題的按鈕。

func createButtons(titles: [String]) -> [UIButton] {

    var buttons = [UIButton]()

    for title in titles {
        let button = UIButton.buttonWithType(.System) as UIButton
        button.setTitle(title, forState: .Normal)
        button.setTranslatesAutoresizingMaskIntoConstraints(false)
        button.backgroundColor = UIColor(white: 1.0, alpha: 1.0)
        button.setTitleColor(UIColor.darkGrayColor(), forState: .Normal)
        button.addTarget(self, action: "keyPressed:", forControlEvents: .TouchUpInside)
        buttons.append(button)
    }

    return buttons
}

此函數遍歷字符串數組,並創建具有相應標題的按鈕。 它還向每個按鈕添加一個目標,以便在點擊該按鈕時將調用功能keyPressed()。 接下來添加此功能。

func keyPressed(sender: AnyObject?) {
    let button = sender as UIButton
    let title = button.titleForState(.Normal)
    (textDocumentProxy as UIKeyInput).insertText(title!)
}

在這里,您可以獲取所點擊按鈕的標題,並通過textDocumentProperty將其插入到當前文本輸入對象的插入點。 這是一個符合UITextDocumentProxy協議的對象,該協議充當鍵盤和召喚它的文本輸入對象之間的代理。

接下來,我們添加addConstraints()方法,該方法將向按鈕和containsView添加約束。

func addConstraints(buttons: [UIButton], containingView: UIView){

        for (index, button) in enumerate(buttons) {

            var topConstraint = NSLayoutConstraint(item: button, attribute: .Top, relatedBy: .Equal, toItem: containingView, attribute: .Top, multiplier: 1.0, constant: 1)

            var bottomConstraint = NSLayoutConstraint(item: button, attribute: .Bottom, relatedBy: .Equal, toItem: containingView, attribute: .Bottom, multiplier: 1.0, constant: -1)

            var leftConstraint : NSLayoutConstraint!

            if index == 0 {

                leftConstraint = NSLayoutConstraint(item: button, attribute: .Left, relatedBy: .Equal, toItem: containingView, attribute: .Left, multiplier: 1.0, constant: 1)

            }else{

                leftConstraint = NSLayoutConstraint(item: button, attribute: .Left, relatedBy: .Equal, toItem: buttons[index-1], attribute: .Right, multiplier: 1.0, constant: 1)

                var widthConstraint = NSLayoutConstraint(item: buttons[0], attribute: .Width, relatedBy: .Equal, toItem: button, attribute: .Width, multiplier: 1.0, constant: 0)

                containingView.addConstraint(widthConstraint)
            }

            var rightConstraint : NSLayoutConstraint!

            if index == buttons.count - 1 {

                rightConstraint = NSLayoutConstraint(item: button, attribute: .Right, relatedBy: .Equal, toItem: containingView, attribute: .Right, multiplier: 1.0, constant: -1)

            }else{

                rightConstraint = NSLayoutConstraint(item: button, attribute: .Right, relatedBy: .Equal, toItem: buttons[index+1], attribute: .Left, multiplier: 1.0, constant: -1)
            }

            containingView.addConstraints([topConstraint, bottomConstraint, rightConstraint, leftConstraint])
        }
    }

運行應用程序,您應該看到類似的鍵盤,如下所示

如您所見,以編程方式添加視圖需要您在代碼中設置約束,並且如果鍵盤的UI復雜且具有許多鍵,則可能會變得復雜且難以調試。 接下來,我們將研究如何使用Interface Builder創建按鈕。

通過導航到文件>新建>文件> iOS>用戶界面>視圖來創建nib文件。 將其命名為KeyboardView並確保它在AC鍵盤目標下。

選擇筆尖的視圖,然后在“屬性”檢查器中,將其“大小”設置為“自由形式”,並將“狀態欄”設置為“無”。 然后轉到“大小”檢查器,將其寬度設置為320,將高度設置為220。

在對super.viewDidLoad()的調用之后,在KeyboardViewController.swift中的viewDidLoad()中添加以下內容。 這會將nib文件設置為視圖控制器的視圖。

let nib = UINib(nibName: "KeyboardView", bundle: nil)
let objects = nib.instantiateWithOwner(self, options: nil)
view = objects[0] as UIView;

將視圖添加到筆尖的主視圖。 單擊“ Interface Builder”界面底部的“ Pin”菜單,並為其設置以下約束-高度40,尾隨空間0,前導空間0和容器頂部空間42。確保未選中“約束到邊距”。

add_constraints

在視圖中添加一個按鈕。 將文本顏色設置為“深灰色”並更改標題。 現在為約束。

使用每個按鈕,選擇“對齊”菜單,然后選擇“容器中的垂直居中”。

alignment auto layout

選擇“-”按鈕,並為Superview添加5的前導空格。

選擇“-”,然后在“大小”檢查器中,確保其前導空間為S,即設置為常數5。

選擇主視圖,然后選擇編輯器>解決自動布局問題>所有視圖>更新框架。

運行該應用程序,您應該看到剛添加的鍵設置在您在代碼中添加的鍵下方。

interface_builder_ui

要為鍵創建插座和操作,請從文檔大綱中選擇文件的所有者,然后在身份檢查器中將類設置為KeyboardViewController。 然后,您可以通過將控件從控件拖到視圖控制器類中,從而像在故事板文件中一樣創建動作和出口。 (您將在下面的示例中看到更多信息)。

既然我們已經了解了如何以編程方式並使用nib文件創建鍵盤的UI,那么讓我們為其添加一些功能。 為此,我有一個將要使用的入門項目。 該項目是一個簡單的鍵盤,我們將向其中添加一些功能。 如下所示。 您應該注意,為簡單起見,我並未針對所有尺寸的類別進行設計,因此雖然在iPhone 5S上看起來不錯,但在更大的屏幕上看起來卻不太一樣。 您可以在此處下載代碼。 還要注意,鍵盤的名稱是Appcoda鍵盤,而不是我們之前使用的AC鍵盤。

keyboard_starter

我已經設置了我們需要的操作和出口,但是沒有為它們編寫代碼(“ Next Keyboard”鍵除外)。

首先,您會注意到“下一鍵盤”鍵已替換為標題為KB的鍵。 在視圖控制器文件中可以看到用於此操作的方法,如下所示。

@IBAction func nextKeyboardPressed(button: UIButton) {
    advanceToNextInputMode()
}

我們首先將設置帶有字母和符號的鍵的操作,即您點擊並看到其標題作為鍵入文本的任何鍵。 我為所有這些鍵創建了一個名為keyPressed()的操作方法。 如圖所示修改此方法。

@IBAction func keyPressed(button: UIButton) {
    var string = button.titleLabel!.text
    (textDocumentProxy as UIKeyInput).insertText("\(string!)")
}

這類似於我們以前的情況。 按鈕的標題通過textDocumentProperty插入到當前文本輸入對象的插入點。 我們輸入的所有字母均以大寫字母表示,但我們會盡快修復。 接下來,修改以下功能以分別為Backspace(BS),Space(SPACE)和Return(RTN)鍵設置操作。

@IBAction func backSpacePressed(button: UIButton) {
    (textDocumentProxy as UIKeyInput).deleteBackward()
}

@IBAction func spacePressed(button: UIButton) {
    (textDocumentProxy as UIKeyInput).insertText(" ")
}

@IBAction func returnPressed(button: UIButton) {
    (textDocumentProxy as UIKeyInput).insertText("\n")
}

運行該應用程序並測試按鍵。

在視圖文件中,您會注意到兩個分別標記為Char Set 1和Char Set 2的視圖。這兩個視圖位於同一行中,一個位於另一個的頂部。 在viewDidLoad()中,第二個視圖被隱藏。 修改所示的charSetPressed()函數,以便當用戶按下標有1/2的鍵時,該鍵的文本將更改為2/2,並且一組新的字符將出現在鍵盤的第一行。

@IBAction func charSetPressed(button: UIButton) {
    if button.titleLabel!.text == "1/2" {
        charSet1.hidden = true
        charSet2.hidden = false
        button.setTitle("2/2", forState: .Normal)
    } else if button.titleLabel!.text == "2/2" {
        charSet1.hidden = false
        charSet2.hidden = true
        button.setTitle("1/2", forState: .Normal)
    }
}

字符集如果您查看系統鍵盤,通常會顯示一個指示,當您按下一個鍵時,該指示會以簡短的動畫形式出現。 我們應該添加某種反饋,以便用戶知道他們點擊了正確的鍵。 在keyPressed()方法的末尾添加以下內容。

UIView.animateWithDuration(0.2, animations: {
        button.transform = CGAffineTransformScale(CGAffineTransformIdentity, 2.0, 2.0)
        }, completion: {(_) -> Void in
            button.transform =
                CGAffineTransformScale(CGAffineTransformIdentity, 1, 1)
    })

輕按此鍵可在返回原始大小之前短暫放大鍵。

最后,我們將實現Capslock鍵(CL)。 如下修改capsLockPressed()函數。

@IBAction func capsLockPressed(button: UIButton) {
    capsLockOn = !capsLockOn

    changeCaps(row1)
    changeCaps(row2)
    changeCaps(row3)
    changeCaps(row4)
}

參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM