gpt4 book ai didi

ios - 如何以编程方式将页面添加到我的自定义键盘和类别(类似于 Apple 表情符号键盘)?

转载 作者:行者123 更新时间:2023-11-28 09:18:05 28 4
gpt4 key购买 nike

如何以编程方式将页面添加到我的自定义键盘和类别(类似于 Apple 表情符号键盘)?

如何以编程方式将页面(向右滑动以获得更多表情符号 - 在本例中为文本)添加到我的自定义键盘,例如 Swift 中的 Apple 表情符号键盘?

我还想知道苹果是如何为他们的表情符号创建他们的自定义类别的,比如花和最近?我假设他们使用数组,但我将如何在 Swift 中以编程方式执行此操作?

import UIKit

class KeyboardViewController: UIInputViewController {

@IBOutlet var nextKeyboardButton: UIButton!

override func updateViewConstraints() {
super.updateViewConstraints()

// Add custom view sizing constraints here
}

override func viewDidLoad() {
super.viewDidLoad()

let buttonTitles1 = ["TEXT0"]
let buttonTitles2 = ["TEXT1"]
let buttonTitles3 = ["TEXT2"]
let buttonTitles4 = ["🌐", "🏃", "🙇", "👫", "💰", "🙈", "Aa", "⌫"]

var row1 = createRowOfButtons(buttonTitles1)
var row2 = createRowOfButtons(buttonTitles2)
var row3 = createRowOfButtons(buttonTitles3)
var row4 = createRowOfButtons(buttonTitles4)

self.view.addSubview(row1)
self.view.addSubview(row2)
self.view.addSubview(row3)
self.view.addSubview(row4)

row1.setTranslatesAutoresizingMaskIntoConstraints(false)
row2.setTranslatesAutoresizingMaskIntoConstraints(false)
row3.setTranslatesAutoresizingMaskIntoConstraints(false)
row4.setTranslatesAutoresizingMaskIntoConstraints(false)

addConstraintsToInputView(self.view, rowViews: [row1, row2, row3, row4])
}

func createRowOfButtons(buttonTitles: [NSString]) -> UIView {

var buttons = [UIButton]()
var keyboardRowView = UIView(frame: CGRectMake(0, 0, 320, 50))

for buttonTitle in buttonTitles{

let button = createButtonWithTitle(buttonTitle)
buttons.append(button)
keyboardRowView.addSubview(button)
}

addIndividualButtonConstraints(buttons, mainView: keyboardRowView)

return keyboardRowView
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated
}

override func textWillChange(textInput: UITextInput) {
// The app is about to change the document's contents. Perform any preparation here.
}

override func textDidChange(textInput: UITextInput) {
// The app has just changed the document's contents, the document context has been updated.

var textColor: UIColor
var proxy = self.textDocumentProxy as UITextDocumentProxy
if proxy.keyboardAppearance == UIKeyboardAppearance.Dark {
textColor = UIColor.whiteColor()
} else {
textColor = UIColor.blackColor()
}
}

func createButtonWithTitle(title: String) -> UIButton {

let button = UIButton.buttonWithType(.System) as UIButton
button.frame = CGRectMake(0, 0, 20, 20)
button.setTitle(title, forState: .Normal)
button.sizeToFit()
button.titleLabel?.font = UIFont.systemFontOfSize(15)
button.setTranslatesAutoresizingMaskIntoConstraints(false)
button.backgroundColor = UIColor(white: 1.0, alpha: 1.0)
button.setTitleColor(UIColor.darkGrayColor(), forState: .Normal)

button.addTarget(self, action: "didTapButton:", forControlEvents: .TouchUpInside)

return button
}

func didTapButton(sender: AnyObject?) {

let button = sender as UIButton
var proxy = textDocumentProxy as UITextDocumentProxy

if let title = button.titleForState(.Normal) {
switch title {
case "TEXT1" :
proxy.insertText("hi")
case "ENTER" :
proxy.insertText("\n")
case "TEXT 2" :
proxy.insertText("YOLO")
case "🌐" :
self.advanceToNextInputMode()
case "TEXT0" :
proxy.insertText("hello")

case "⌫" :
proxy.deleteBackward()
default :
proxy.insertText("WUT?!")
}
}
}

func addIndividualButtonConstraints(buttons: [UIButton], mainView: UIView){

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

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

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

var rightConstraint : NSLayoutConstraint!

if index == buttons.count - 1 {

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

}else{

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

var leftConstraint : NSLayoutConstraint!

if index == 0 {

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

}else{

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

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

widthConstraint.priority = 800
mainView.addConstraint(widthConstraint)
}

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

func addConstraintsToInputView(inputView: UIView, rowViews: [UIView]){

for (index, rowView) in enumerate(rowViews) {
var rightSideConstraint = NSLayoutConstraint(item: rowView, attribute: .Right, relatedBy: .Equal, toItem: inputView, attribute: .Right, multiplier: 1.0, constant: -1)

var leftConstraint = NSLayoutConstraint(item: rowView, attribute: .Left, relatedBy: .Equal, toItem: inputView, attribute: .Left, multiplier: 1.0, constant: 1)

inputView.addConstraints([leftConstraint, rightSideConstraint])

var topConstraint: NSLayoutConstraint

if index == 0 {
topConstraint = NSLayoutConstraint(item: rowView, attribute: .Top, relatedBy: .Equal, toItem: inputView, attribute: .Top, multiplier: 1.0, constant: 0)

}else{

let prevRow = rowViews[index-1]
topConstraint = NSLayoutConstraint(item: rowView, attribute: .Top, relatedBy: .Equal, toItem: prevRow, attribute: .Bottom, multiplier: 1.0, constant: 0)

let firstRow = rowViews[0]
var heightConstraint = NSLayoutConstraint(item: firstRow, attribute: .Height, relatedBy: .Equal, toItem: rowView, attribute: .Height, multiplier: 1.0, constant: 0)

heightConstraint.priority = 800
inputView.addConstraint(heightConstraint)
}
inputView.addConstraint(topConstraint)

var bottomConstraint: NSLayoutConstraint

if index == rowViews.count - 1 {
bottomConstraint = NSLayoutConstraint(item: rowView, attribute: .Bottom, relatedBy: .Equal, toItem: inputView, attribute: .Bottom, multiplier: 1.0, constant: 0)

}else{

let nextRow = rowViews[index+1]
bottomConstraint = NSLayoutConstraint(item: rowView, attribute: .Bottom, relatedBy: .Equal, toItem: nextRow, attribute: .Top, multiplier: 1.0, constant: 0)
}

inputView.addConstraint(bottomConstraint)
}
}
}

最佳答案

我会尽量避免这种方法。我尝试做与您相同的操作,因为页面控制元素(Apple 制作的用于切换页面的表情符号键盘上的点)似乎不适用于我的自定义键盘。我创建了一个 xib 文件并将元素拖到 xib 文件上,该文件托管了我所有的按钮(当然这可以通过编程方式完成),但它没有显示在我的模拟器上,而是让我的键盘消失了。我以编程方式实现了页面控制元素并得到了相同的结果。这次我有不同的方法:

  • 制作一个切换当前按钮的按钮,或修改键盘上先前按钮的值和图像的按钮。

我发现这种方式更容易。我自己还没有实现它,但我相信这是一个良好的开端,可以切换自定义键盘上的按钮。希望有人会回答这个关于如何合并页面控制元素的问题。

希望这对您有所帮助。

关于ios - 如何以编程方式将页面添加到我的自定义键盘和类别(类似于 Apple 表情符号键盘)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26612286/

28 4 0
文章推荐: ios - 使用 Xcode 6 在 UICollectionView 中继续
文章推荐: javascript - 裁剪后调整图像大小
文章推荐: css - Bootstrap 3.x 导航选项卡的响应问题
文章推荐: css -
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com