Friday 15 April 2011

ios - How can I programmatically add pages to my custom keyboard as well as categories (similar to Apple emoji Keyboard)? -



ios - How can I programmatically add pages to my custom keyboard as well as categories (similar to Apple emoji Keyboard)? -

how can programmatically add together pages custom keyboard categories (similar apple emoji keyboard)?

how can add together pages (swipe right more emojis - in case text) custom keyboard apple's emoji keyboard in swift programatically?

i wondering how apple creates custom categories emoji's flower , recents? i'm assuming utilize arrays, how go doing programatically in swift?

import uikit class keyboardviewcontroller: uiinputviewcontroller { @iboutlet var nextkeyboardbutton: uibutton! override func updateviewconstraints() { super.updateviewconstraints() // add together custom view sizing constraints here } override func viewdidload() { super.viewdidload() allow buttontitles1 = ["text0"] allow buttontitles2 = ["text1"] allow buttontitles3 = ["text2"] allow 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)) buttontitle in buttontitles{ allow button = createbuttonwithtitle(buttontitle) buttons.append(button) keyboardrowview.addsubview(button) } addindividualbuttonconstraints(buttons, mainview: keyboardrowview) homecoming keyboardrowview } override func didreceivememorywarning() { super.didreceivememorywarning() // dispose of resources can recreated } override func textwillchange(textinput: uitextinput) { // app alter document's contents. perform preparation here. } override func textdidchange(textinput: uitextinput) { // app has changed document's contents, document context has been updated. var textcolor: uicolor var proxy = self.textdocumentproxy uitextdocumentproxy if proxy.keyboardappearance == uikeyboardappearance.dark { textcolor = uicolor.whitecolor() } else { textcolor = uicolor.blackcolor() } } func createbuttonwithtitle(title: string) -> uibutton { allow button = uibutton.buttonwithtype(.system) 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) homecoming button } func didtapbutton(sender: anyobject?) { allow button = sender uibutton var proxy = textdocumentproxy uitextdocumentproxy if allow 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){ (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{ allow 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{ allow prevtbutton = buttons[index-1] leftconstraint = nslayoutconstraint(item: button, attribute: .left, relatedby: .equal, toitem: prevtbutton, attribute: .right, multiplier: 1.0, constant: 1) allow 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]){ (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{ allow prevrow = rowviews[index-1] topconstraint = nslayoutconstraint(item: rowview, attribute: .top, relatedby: .equal, toitem: prevrow, attribute: .bottom, multiplier: 1.0, constant: 0) allow 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{ allow nextrow = rowviews[index+1] bottomconstraint = nslayoutconstraint(item: rowview, attribute: .bottom, relatedby: .equal, toitem: nextrow, attribute: .top, multiplier: 1.0, constant: 0) } inputview.addconstraint(bottomconstraint) } } }

i seek avoid method. tried same did because page-control element ( dots on emoji keyboard made apple switch pages) doesn't seem work custom keyboard. create xib file , dragged element onto xib file, file hosted buttons (this done programmatically of course), instead of showing on simulator made keyboard disappear. implemented page-control element programmatically , got same result. have different way of doing time:

make button switches current buttons, or button modifies values , image of previous buttons on keyboard.

i find way much more easier. have not implemented myself, sure start switching buttons on custom keyboard of now. reply question on how incorporate page-control element.

hope helped.

ios xcode swift keyboard ios8

No comments:

Post a Comment