├── .DS_Store ├── keyboard.gif ├── BCKeyBoard ├── .DS_Store ├── image │ ├── .DS_Store │ ├── emoji │ │ ├── .DS_Store │ │ ├── faceDelete.png │ │ └── faceDelete@2x.png │ └── MessageToolbarImages │ │ ├── .DS_Store │ │ ├── Color │ │ ├── .DS_Store │ │ ├── chatBar_colorMore_camera@2x.png │ │ ├── chatBar_colorMore_photo@2x.png │ │ ├── chatBar_colorMore_video@2x.png │ │ ├── chatBar_colorMore_audioCall@2x.png │ │ ├── chatBar_colorMore_location@2x.png │ │ ├── chatBar_colorMore_cameraSelected@2x.png │ │ ├── chatBar_colorMore_photoSelected@2x.png │ │ ├── chatBar_colorMore_videoSelected@2x.png │ │ ├── chatBar_colorMore_locationSelected@2x.png │ │ └── chatBar_colorMore_audioCallSelected@2x.png │ │ ├── Gray │ │ ├── .DS_Store │ │ ├── chatBar_more_photo.png │ │ ├── chatBar_more_camera.png │ │ ├── chatBar_more_location.png │ │ ├── chatBar_more_photo@2x.png │ │ ├── chatBar_more_camera@2x.png │ │ ├── chatBar_more_location@2x.png │ │ ├── chatBar_more_photoSelected.png │ │ ├── chatBar_more_cameraSelected.png │ │ ├── chatBar_more_cameraSelected@2x.png │ │ ├── chatBar_more_locationSelected.png │ │ ├── chatBar_more_photoSelected@2x.png │ │ └── chatBar_more_locationSelected@2x.png │ │ ├── chatBar_face.png │ │ ├── chatBar_more.png │ │ ├── chatBar_face@2x.png │ │ ├── chatBar_keyboard.png │ │ ├── chatBar_more@2x.png │ │ ├── chatBar_record.png │ │ ├── chatBar_recordBg.png │ │ ├── chatBar_record@2x.png │ │ ├── chatBar_faceSelected.png │ │ ├── chatBar_keyboard@2x.png │ │ ├── chatBar_moreSelected.png │ │ ├── chatBar_recordBg@2x.png │ │ ├── messageToolbarBg@2x.png │ │ ├── chatBar_faceSelected@2x.png │ │ ├── chatBar_moreSelected@2x.png │ │ ├── chatBar_recordSelected.png │ │ ├── chatBar_keyboardSelected.png │ │ ├── chatBar_recordSelected@2x.png │ │ ├── chatBar_recordSelectedBg.png │ │ ├── chatBar_keyboardSelected@2x.png │ │ └── chatBar_recordSelectedBg@2x.png ├── BCTextView.h ├── Const.h ├── BCMoreView.h ├── FaceVIew │ ├── Emoji.m │ ├── DXFaceView.h │ ├── FacialView.h │ ├── Emoji.h │ ├── DXFaceView.m │ ├── EmojiEmoticons.h │ ├── FacialView.m │ └── EmojiEmoticons.m ├── BCKeyBoard.h ├── BCMoreView.m ├── BCTextView.m └── BCKeyBoard.m ├── BCKeyBoardDemo ├── .DS_Store ├── BCKeyBoardDemo │ ├── BCKeyBoard │ │ ├── .DS_Store │ │ ├── image │ │ │ ├── .DS_Store │ │ │ ├── emoji │ │ │ │ ├── .DS_Store │ │ │ │ ├── faceDelete.png │ │ │ │ └── faceDelete@2x.png │ │ │ └── MessageToolbarImages │ │ │ │ ├── .DS_Store │ │ │ │ ├── Color │ │ │ │ ├── .DS_Store │ │ │ │ ├── chatBar_colorMore_camera@2x.png │ │ │ │ ├── chatBar_colorMore_photo@2x.png │ │ │ │ ├── chatBar_colorMore_video@2x.png │ │ │ │ ├── chatBar_colorMore_audioCall@2x.png │ │ │ │ ├── chatBar_colorMore_location@2x.png │ │ │ │ ├── chatBar_colorMore_cameraSelected@2x.png │ │ │ │ ├── chatBar_colorMore_photoSelected@2x.png │ │ │ │ ├── chatBar_colorMore_videoSelected@2x.png │ │ │ │ ├── chatBar_colorMore_locationSelected@2x.png │ │ │ │ └── chatBar_colorMore_audioCallSelected@2x.png │ │ │ │ ├── Gray │ │ │ │ ├── .DS_Store │ │ │ │ ├── chatBar_more_photo.png │ │ │ │ ├── chatBar_more_camera.png │ │ │ │ ├── chatBar_more_location.png │ │ │ │ ├── chatBar_more_photo@2x.png │ │ │ │ ├── chatBar_more_camera@2x.png │ │ │ │ ├── chatBar_more_location@2x.png │ │ │ │ ├── chatBar_more_photoSelected.png │ │ │ │ ├── chatBar_more_cameraSelected.png │ │ │ │ ├── chatBar_more_cameraSelected@2x.png │ │ │ │ ├── chatBar_more_locationSelected.png │ │ │ │ ├── chatBar_more_photoSelected@2x.png │ │ │ │ └── chatBar_more_locationSelected@2x.png │ │ │ │ ├── chatBar_face.png │ │ │ │ ├── chatBar_more.png │ │ │ │ ├── chatBar_face@2x.png │ │ │ │ ├── chatBar_keyboard.png │ │ │ │ ├── chatBar_more@2x.png │ │ │ │ ├── chatBar_record.png │ │ │ │ ├── chatBar_recordBg.png │ │ │ │ ├── chatBar_record@2x.png │ │ │ │ ├── chatBar_faceSelected.png │ │ │ │ ├── chatBar_keyboard@2x.png │ │ │ │ ├── chatBar_moreSelected.png │ │ │ │ ├── chatBar_recordBg@2x.png │ │ │ │ ├── messageToolbarBg@2x.png │ │ │ │ ├── chatBar_faceSelected@2x.png │ │ │ │ ├── chatBar_moreSelected@2x.png │ │ │ │ ├── chatBar_recordSelected.png │ │ │ │ ├── chatBar_keyboardSelected.png │ │ │ │ ├── chatBar_recordSelected@2x.png │ │ │ │ ├── chatBar_recordSelectedBg.png │ │ │ │ ├── chatBar_keyboardSelected@2x.png │ │ │ │ └── chatBar_recordSelectedBg@2x.png │ │ ├── BCTextView.h │ │ ├── Const.h │ │ ├── BCMoreView.h │ │ ├── FaceVIew │ │ │ ├── Emoji.m │ │ │ ├── DXFaceView.h │ │ │ ├── FacialView.h │ │ │ ├── Emoji.h │ │ │ ├── DXFaceView.m │ │ │ ├── EmojiEmoticons.h │ │ │ ├── FacialView.m │ │ │ └── EmojiEmoticons.m │ │ ├── BCKeyBoard.h │ │ ├── BCMoreView.m │ │ ├── BCTextView.m │ │ └── BCKeyBoard.m │ ├── ViewController.h │ ├── AppDelegate.h │ ├── main.m │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── ViewController.m │ ├── Base.lproj │ │ ├── Main.storyboard │ │ └── LaunchScreen.storyboard │ ├── Info.plist │ └── AppDelegate.m ├── BCKeyBoardDemo.xcodeproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ └── baochao.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ ├── xcuserdata │ │ └── baochao.xcuserdatad │ │ │ └── xcschemes │ │ │ ├── xcschememanagement.plist │ │ │ └── BCKeyBoardDemo.xcscheme │ └── project.pbxproj ├── BCKeyBoardDemoTests │ ├── Info.plist │ └── BCKeyBoardDemoTests.m └── BCKeyBoardDemoUITests │ ├── Info.plist │ └── BCKeyBoardDemoUITests.m └── README.md /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/.DS_Store -------------------------------------------------------------------------------- /keyboard.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/keyboard.gif -------------------------------------------------------------------------------- /BCKeyBoard/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/.DS_Store -------------------------------------------------------------------------------- /BCKeyBoardDemo/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/.DS_Store -------------------------------------------------------------------------------- /BCKeyBoard/image/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/.DS_Store -------------------------------------------------------------------------------- /BCKeyBoard/image/emoji/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/emoji/.DS_Store -------------------------------------------------------------------------------- /BCKeyBoard/image/emoji/faceDelete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/emoji/faceDelete.png -------------------------------------------------------------------------------- /BCKeyBoard/image/emoji/faceDelete@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/emoji/faceDelete@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/.DS_Store -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/.DS_Store -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Color/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/.DS_Store -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Gray/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/.DS_Store -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_face.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_face.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_more.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_face@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_face@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_keyboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboard.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_more@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_more@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_record.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_record.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_recordBg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_recordBg.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/.DS_Store -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_record@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_record@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_faceSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_faceSelected.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_keyboard@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboard@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_moreSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_moreSelected.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_recordBg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_recordBg@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/messageToolbarBg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/messageToolbarBg@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/emoji/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/emoji/.DS_Store -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photo.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_faceSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_faceSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_moreSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_moreSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelected.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_camera.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_location.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photo@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_keyboardSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboardSelected.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelectedBg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelectedBg.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/emoji/faceDelete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/emoji/faceDelete.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_camera@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_camera@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_keyboardSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboardSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelectedBg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelectedBg@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/emoji/faceDelete@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/emoji/faceDelete@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_location@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_location@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photoSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photoSelected.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_camera@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_camera@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_photo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_photo@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_video@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_video@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_cameraSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_cameraSelected.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_audioCall@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_audioCall@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_location@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_location@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_cameraSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_cameraSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_locationSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_locationSelected.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photoSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photoSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/.DS_Store -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_locationSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_locationSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_cameraSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_cameraSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_photoSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_photoSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_videoSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_videoSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/.DS_Store -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/.DS_Store -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_locationSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_locationSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_face.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_face.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_more.png -------------------------------------------------------------------------------- /BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_audioCallSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_audioCallSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_face@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_face@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboard.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_more@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_more@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_record.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_record.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordBg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordBg.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_record@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_record@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_faceSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_faceSelected.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboard@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboard@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_moreSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_moreSelected.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordBg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordBg@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/messageToolbarBg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/messageToolbarBg@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photo.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_faceSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_faceSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_moreSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_moreSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelected.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_camera.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_location.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photo@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboardSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboardSelected.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelectedBg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelectedBg.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_camera@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_camera@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboardSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_keyboardSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelectedBg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/chatBar_recordSelectedBg@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_location@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_location@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photoSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photoSelected.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_camera@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_camera@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_photo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_photo@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_video@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_video@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_cameraSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_cameraSelected.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_audioCall@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_audioCall@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_location@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_location@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_cameraSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_cameraSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_locationSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_locationSelected.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photoSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_photoSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_locationSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Gray/chatBar_more_locationSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_cameraSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_cameraSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_photoSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_photoSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_videoSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_videoSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_locationSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_locationSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_audioCallSelected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/image/MessageToolbarImages/Color/chatBar_colorMore_audioCallSelected@2x.png -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo.xcodeproj/project.xcworkspace/xcuserdata/baochao.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitBaoChao/BCKeyboard/HEAD/BCKeyBoardDemo/BCKeyBoardDemo.xcodeproj/project.xcworkspace/xcuserdata/baochao.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // BCKeyBoardDemo 4 | // 5 | // Created by baochao on 15/7/29. 6 | // Copyright (c) 2015年 baochao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /BCKeyBoard/BCTextView.h: -------------------------------------------------------------------------------- 1 | // 2 | // BCTextView.h 3 | // BCDemo 4 | // 5 | // Created by baochao on 15/7/27. 6 | // Copyright (c) 2015年 baochao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BCTextView : UITextView 12 | @property (nonatomic, retain) NSString *placeholder; 13 | @property (nonatomic, retain) UIColor *placeholderColor; 14 | @end 15 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // BCKeyBoardDemo 4 | // 5 | // Created by baochao on 15/7/29. 6 | // Copyright (c) 2015年 baochao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/BCTextView.h: -------------------------------------------------------------------------------- 1 | // 2 | // BCTextView.h 3 | // BCDemo 4 | // 5 | // Created by baochao on 15/7/27. 6 | // Copyright (c) 2015年 baochao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BCTextView : UITextView 12 | @property (nonatomic, retain) NSString *placeholder; 13 | @property (nonatomic, retain) UIColor *placeholderColor; 14 | @end 15 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // BCKeyBoardDemo 4 | // 5 | // Created by baochao on 15/12/28. 6 | // Copyright © 2015年 io.hzlzh.yunshouyi. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /BCKeyBoard/Const.h: -------------------------------------------------------------------------------- 1 | // 2 | // Const.h 3 | // BCKeyBoardDemo 4 | // 5 | // Created by baochao on 15/7/21. 6 | // Copyright (c) 2015年 baochao. All rights reserved. 7 | // 8 | 9 | #define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width) 10 | #define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height) 11 | 12 | 13 | #define kBCTextViewHeight 36 /**< 底部textView的高度 */ 14 | #define kHorizontalPadding 8 /**< 横向间隔 */ 15 | #define kVerticalPadding 5 /**< 纵向间隔 */ 16 | 17 | -------------------------------------------------------------------------------- /BCKeyBoard/BCMoreView.h: -------------------------------------------------------------------------------- 1 | // 2 | // BCMoreView.h 3 | // BCDemo 4 | // 5 | // Created by baochao on 15/7/27. 6 | // Copyright (c) 2015年 baochao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @protocol BCMoreViewDelegate 12 | 13 | - (void)didselectImageView:(NSInteger)index; 14 | 15 | @end 16 | 17 | @interface BCMoreView : UIView 18 | @property (nonatomic,strong)NSArray *imageArray; 19 | @property (nonatomic,weak)id delegate; 20 | @end 21 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/Const.h: -------------------------------------------------------------------------------- 1 | // 2 | // Const.h 3 | // BCKeyBoardDemo 4 | // 5 | // Created by baochao on 15/7/21. 6 | // Copyright (c) 2015年 baochao. All rights reserved. 7 | // 8 | 9 | #define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width) 10 | #define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height) 11 | 12 | 13 | #define kBCTextViewHeight 36 /**< 底部textView的高度 */ 14 | #define kHorizontalPadding 8 /**< 横向间隔 */ 15 | #define kVerticalPadding 5 /**< 纵向间隔 */ 16 | 17 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/BCMoreView.h: -------------------------------------------------------------------------------- 1 | // 2 | // BCMoreView.h 3 | // BCDemo 4 | // 5 | // Created by baochao on 15/7/27. 6 | // Copyright (c) 2015年 baochao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @protocol BCMoreViewDelegate 12 | 13 | - (void)didselectImageView:(NSInteger)index; 14 | 15 | @end 16 | 17 | @interface BCMoreView : UIView 18 | @property (nonatomic,strong)NSArray *imageArray; 19 | @property (nonatomic,weak)id delegate; 20 | @end 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BCKeyboard 2 | 这是一个聊天键盘,使用方法 3 | 4 | BCKeyBoard *bc = [[BCKeyBoard alloc] initWithFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height - 46, [UIScreen mainScreen].bounds.size.width,46)]; 5 | 6 | bc.delegate = self; 7 | 8 | bc.imageArray = @[];图片数组 9 | 10 | bc.placeholder = @"";占位文字 11 | 12 | bc.placeholderColor = ;占位文字颜色 13 | 14 | bc.backgroundColor = [UIColor clearColor]; 15 | 16 | bc.currentCtr = self;当前控制器 17 | 18 | [self.view addSubview:bc]; 19 | 20 | ###GitHub仓库中的图片 21 | ![](keyboard.gif) 22 | -------------------------------------------------------------------------------- /BCKeyBoard/FaceVIew/Emoji.m: -------------------------------------------------------------------------------- 1 | // 2 | // Emoji.m 3 | // Emoji 4 | // 5 | // Created by Aliksandr Andrashuk on 26.10.12. 6 | // Copyright (c) 2012 Aliksandr Andrashuk. All rights reserved. 7 | // 8 | 9 | #import "Emoji.h" 10 | #import "EmojiEmoticons.h" 11 | 12 | 13 | @implementation Emoji 14 | + (NSString *)emojiWithCode:(int)code { 15 | int sym = EMOJI_CODE_TO_SYMBOL(code); 16 | return [[NSString alloc] initWithBytes:&sym length:sizeof(sym) encoding:NSUTF8StringEncoding]; 17 | } 18 | + (NSArray *)allEmoji { 19 | NSMutableArray *array = [NSMutableArray new]; 20 | [array addObjectsFromArray:[EmojiEmoticons allEmoticons]]; 21 | return array; 22 | } 23 | @end 24 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/FaceVIew/Emoji.m: -------------------------------------------------------------------------------- 1 | // 2 | // Emoji.m 3 | // Emoji 4 | // 5 | // Created by Aliksandr Andrashuk on 26.10.12. 6 | // Copyright (c) 2012 Aliksandr Andrashuk. All rights reserved. 7 | // 8 | 9 | #import "Emoji.h" 10 | #import "EmojiEmoticons.h" 11 | 12 | 13 | @implementation Emoji 14 | + (NSString *)emojiWithCode:(int)code { 15 | int sym = EMOJI_CODE_TO_SYMBOL(code); 16 | return [[NSString alloc] initWithBytes:&sym length:sizeof(sym) encoding:NSUTF8StringEncoding]; 17 | } 18 | + (NSArray *)allEmoji { 19 | NSMutableArray *array = [NSMutableArray new]; 20 | [array addObjectsFromArray:[EmojiEmoticons allEmoticons]]; 21 | return array; 22 | } 23 | @end 24 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemoTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemoUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo.xcodeproj/xcuserdata/baochao.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | BCKeyBoardDemo.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | CBE2CEE61C30E3FA0078DC13 16 | 17 | primary 18 | 19 | 20 | CBE2CEFF1C30E3FA0078DC13 21 | 22 | primary 23 | 24 | 25 | CBE2CF0A1C30E3FA0078DC13 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /BCKeyBoard/BCKeyBoard.h: -------------------------------------------------------------------------------- 1 | // 2 | // BCKeyBoard.h 3 | // BCDemo 4 | // 5 | // Created by baochao on 15/7/27. 6 | // Copyright (c) 2015年 baochao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @protocol BCKeyBoardDelegate 12 | 13 | /** 14 | 发送的文字 15 | */ 16 | - (void)didSendText:(NSString *)text; 17 | 18 | /** 19 | 回调返回高度 20 | */ 21 | - (void)returnHeight:(CGFloat)height; 22 | 23 | /** 24 | 回调返回的图片 25 | */ 26 | - (void)returnImage:(UIImage *)image; 27 | 28 | @end 29 | 30 | @interface BCKeyBoard : UIView 31 | 32 | @property (nonatomic,weak)id delegate; 33 | @property (nonatomic,strong)NSArray *imageArray; /**< 点击加号弹出的View中的图片数组 */ 34 | @property (nonatomic,strong)NSString *placeholder; /**< 占位文字 */ 35 | @property (nonatomic,strong)UIColor *placeholderColor; /**< 占位文字颜色 */ 36 | @property (nonatomic,strong)UIViewController *currentCtr;/**< 控制器 */ 37 | @end 38 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/BCKeyBoard.h: -------------------------------------------------------------------------------- 1 | // 2 | // BCKeyBoard.h 3 | // BCDemo 4 | // 5 | // Created by baochao on 15/7/27. 6 | // Copyright (c) 2015年 baochao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @protocol BCKeyBoardDelegate 12 | 13 | /** 14 | 发送的文字 15 | */ 16 | - (void)didSendText:(NSString *)text; 17 | 18 | /** 19 | 回调返回高度 20 | */ 21 | - (void)returnHeight:(CGFloat)height; 22 | 23 | /** 24 | 回调返回的图片 25 | */ 26 | - (void)returnImage:(UIImage *)image; 27 | 28 | @end 29 | 30 | @interface BCKeyBoard : UIView 31 | 32 | @property (nonatomic,weak)id delegate; 33 | @property (nonatomic,strong)NSArray *imageArray; /**< 点击加号弹出的View中的图片数组 */ 34 | @property (nonatomic,strong)NSString *placeholder; /**< 占位文字 */ 35 | @property (nonatomic,strong)UIColor *placeholderColor; /**< 占位文字颜色 */ 36 | @property (nonatomic,strong)UIViewController *currentCtr; 37 | @end 38 | -------------------------------------------------------------------------------- /BCKeyBoard/FaceVIew/DXFaceView.h: -------------------------------------------------------------------------------- 1 | /************************************************************ 2 | * * EaseMob CONFIDENTIAL 3 | * __________________ 4 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. 5 | * 6 | * NOTICE: All information contained herein is, and remains 7 | * the property of EaseMob Technologies. 8 | * Dissemination of this information or reproduction of this material 9 | * is strictly forbidden unless prior written permission is obtained 10 | * from EaseMob Technologies. 11 | */ 12 | 13 | #import 14 | 15 | #import "FacialView.h" 16 | 17 | @protocol DXFaceDelegate 18 | 19 | @required 20 | - (void)selectedFacialView:(NSString *)str isDelete:(BOOL)isDelete; 21 | - (void)sendFace; 22 | 23 | @end 24 | 25 | 26 | @interface DXFaceView : UIView 27 | 28 | @property (nonatomic, assign) id delegate; 29 | 30 | - (BOOL)stringIsFace:(NSString *)string; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/FaceVIew/DXFaceView.h: -------------------------------------------------------------------------------- 1 | /************************************************************ 2 | * * EaseMob CONFIDENTIAL 3 | * __________________ 4 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. 5 | * 6 | * NOTICE: All information contained herein is, and remains 7 | * the property of EaseMob Technologies. 8 | * Dissemination of this information or reproduction of this material 9 | * is strictly forbidden unless prior written permission is obtained 10 | * from EaseMob Technologies. 11 | */ 12 | 13 | #import 14 | 15 | #import "FacialView.h" 16 | 17 | @protocol DXFaceDelegate 18 | 19 | @required 20 | - (void)selectedFacialView:(NSString *)str isDelete:(BOOL)isDelete; 21 | - (void)sendFace; 22 | 23 | @end 24 | 25 | 26 | @interface DXFaceView : UIView 27 | 28 | @property (nonatomic, assign) id delegate; 29 | 30 | - (BOOL)stringIsFace:(NSString *)string; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /BCKeyBoard/FaceVIew/FacialView.h: -------------------------------------------------------------------------------- 1 | /************************************************************ 2 | * * EaseMob CONFIDENTIAL 3 | * __________________ 4 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. 5 | * 6 | * NOTICE: All information contained herein is, and remains 7 | * the property of EaseMob Technologies. 8 | * Dissemination of this information or reproduction of this material 9 | * is strictly forbidden unless prior written permission is obtained 10 | * from EaseMob Technologies. 11 | */ 12 | 13 | #import 14 | 15 | @protocol FacialViewDelegate 16 | 17 | @optional 18 | -(void)selectedFacialView:(NSString*)str; 19 | -(void)deleteSelected:(NSString *)str; 20 | -(void)sendFace; 21 | 22 | @end 23 | 24 | 25 | @interface FacialView : UIView 26 | { 27 | NSArray *_faces; 28 | } 29 | 30 | @property(nonatomic) id delegate; 31 | 32 | @property(strong, nonatomic, readonly) NSArray *faces; 33 | 34 | -(void)loadFacialView:(int)page size:(CGSize)size; 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/FaceVIew/FacialView.h: -------------------------------------------------------------------------------- 1 | /************************************************************ 2 | * * EaseMob CONFIDENTIAL 3 | * __________________ 4 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. 5 | * 6 | * NOTICE: All information contained herein is, and remains 7 | * the property of EaseMob Technologies. 8 | * Dissemination of this information or reproduction of this material 9 | * is strictly forbidden unless prior written permission is obtained 10 | * from EaseMob Technologies. 11 | */ 12 | 13 | #import 14 | 15 | @protocol FacialViewDelegate 16 | 17 | @optional 18 | -(void)selectedFacialView:(NSString*)str; 19 | -(void)deleteSelected:(NSString *)str; 20 | -(void)sendFace; 21 | 22 | @end 23 | 24 | 25 | @interface FacialView : UIView 26 | { 27 | NSArray *_faces; 28 | } 29 | 30 | @property(nonatomic) id delegate; 31 | 32 | @property(strong, nonatomic, readonly) NSArray *faces; 33 | 34 | -(void)loadFacialView:(int)page size:(CGSize)size; 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /BCKeyBoard/FaceVIew/Emoji.h: -------------------------------------------------------------------------------- 1 | /*! 2 | @header emoji.h 3 | @abstract 提供对iOS内置表情编码处理 4 | @author EaseMob Inc. 5 | @version 1.00 2014/01/01 Creation (1.00) 6 | */ 7 | 8 | #import 9 | 10 | #define MAKE_Q(x) @#x 11 | #define MAKE_EM(x,y) MAKE_Q(x##y) 12 | 13 | #pragma clang diagnostic push 14 | #pragma clang diagnostic ignored "-Wunicode" 15 | #define MAKE_EMOJI(x) MAKE_EM(\U000,x) 16 | #pragma clang diagnostic pop 17 | 18 | #define EMOJI_METHOD(x,y) + (NSString *)x { return MAKE_EMOJI(y); } 19 | #define EMOJI_HMETHOD(x) + (NSString *)x; 20 | #define EMOJI_CODE_TO_SYMBOL(x) ((((0x808080F0 | (x & 0x3F000) >> 4) | (x & 0xFC0) << 10) | (x & 0x1C0000) << 18) | (x & 0x3F) << 24); 21 | 22 | /*! 23 | @class 24 | @brief iOS内置表情编码处理类 25 | */ 26 | @interface Emoji : NSObject 27 | 28 | /*! 29 | @method 30 | @brief unicode编码转换为iOS内置表情字符串 31 | @discussion 32 | @param code iOS内置表情对应的unicode编码值 33 | @result iOS内置表情字符串 34 | */ 35 | + (NSString *)emojiWithCode:(int)code; 36 | 37 | /*! 38 | @method 39 | @brief 获取所有iOS内置表情 40 | @discussion 41 | @result iOS表情字符串数组 42 | */ 43 | + (NSArray *)allEmoji; 44 | @end 45 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemoTests/BCKeyBoardDemoTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // BCKeyBoardDemoTests.m 3 | // BCKeyBoardDemoTests 4 | // 5 | // Created by baochao on 15/12/28. 6 | // Copyright © 2015年 io.hzlzh.yunshouyi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BCKeyBoardDemoTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation BCKeyBoardDemoTests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | // Put setup code here. This method is called before the invocation of each test method in the class. 20 | } 21 | 22 | - (void)tearDown { 23 | // Put teardown code here. This method is called after the invocation of each test method in the class. 24 | [super tearDown]; 25 | } 26 | 27 | - (void)testExample { 28 | // This is an example of a functional test case. 29 | // Use XCTAssert and related functions to verify your tests produce the correct results. 30 | } 31 | 32 | - (void)testPerformanceExample { 33 | // This is an example of a performance test case. 34 | [self measureBlock:^{ 35 | // Put the code you want to measure the time of here. 36 | }]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/FaceVIew/Emoji.h: -------------------------------------------------------------------------------- 1 | /*! 2 | @header emoji.h 3 | @abstract 提供对iOS内置表情编码处理 4 | @author EaseMob Inc. 5 | @version 1.00 2014/01/01 Creation (1.00) 6 | */ 7 | 8 | #import 9 | 10 | #define MAKE_Q(x) @#x 11 | #define MAKE_EM(x,y) MAKE_Q(x##y) 12 | 13 | #pragma clang diagnostic push 14 | #pragma clang diagnostic ignored "-Wunicode" 15 | #define MAKE_EMOJI(x) MAKE_EM(\U000,x) 16 | #pragma clang diagnostic pop 17 | 18 | #define EMOJI_METHOD(x,y) + (NSString *)x { return MAKE_EMOJI(y); } 19 | #define EMOJI_HMETHOD(x) + (NSString *)x; 20 | #define EMOJI_CODE_TO_SYMBOL(x) ((((0x808080F0 | (x & 0x3F000) >> 4) | (x & 0xFC0) << 10) | (x & 0x1C0000) << 18) | (x & 0x3F) << 24); 21 | 22 | /*! 23 | @class 24 | @brief iOS内置表情编码处理类 25 | */ 26 | @interface Emoji : NSObject 27 | 28 | /*! 29 | @method 30 | @brief unicode编码转换为iOS内置表情字符串 31 | @discussion 32 | @param code iOS内置表情对应的unicode编码值 33 | @result iOS内置表情字符串 34 | */ 35 | + (NSString *)emojiWithCode:(int)code; 36 | 37 | /*! 38 | @method 39 | @brief 获取所有iOS内置表情 40 | @discussion 41 | @result iOS表情字符串数组 42 | */ 43 | + (NSArray *)allEmoji; 44 | @end 45 | -------------------------------------------------------------------------------- /BCKeyBoard/BCMoreView.m: -------------------------------------------------------------------------------- 1 | // 2 | // BCMoreView.m 3 | // BCDemo 4 | // 5 | // Created by baochao on 15/7/27. 6 | // Copyright (c) 2015年 baochao. All rights reserved. 7 | // 8 | 9 | #import "BCMoreView.h" 10 | 11 | @implementation BCMoreView 12 | - (instancetype)initWithFrame:(CGRect)frame{ 13 | if(self = [super initWithFrame:frame]){ 14 | 15 | } 16 | return self; 17 | } 18 | - (void)setImageArray:(NSArray *)imageArray 19 | { 20 | CGFloat padding = ([UIScreen mainScreen].bounds.size.width - 42*4)/5; 21 | for(int i=0;i 10 | 11 | @interface BCKeyBoardDemoUITests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation BCKeyBoardDemoUITests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | 22 | // In UI tests it is usually best to stop immediately when a failure occurs. 23 | self.continueAfterFailure = NO; 24 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 25 | [[[XCUIApplication alloc] init] launch]; 26 | 27 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 28 | } 29 | 30 | - (void)tearDown { 31 | // Put teardown code here. This method is called after the invocation of each test method in the class. 32 | [super tearDown]; 33 | } 34 | 35 | - (void)testExample { 36 | // Use recording to get started writing UI tests. 37 | // Use XCTAssert and related functions to verify your tests produce the correct results. 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // BCKeyBoardDemo 4 | // 5 | // Created by baochao on 15/7/29. 6 | // Copyright (c) 2015年 baochao. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "BCKeyBoard.h" 11 | @interface ViewController () 12 | 13 | @end 14 | 15 | @implementation ViewController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | NSArray *array = @[@"chatBar_colorMore_photoSelected",@"chatBar_colorMore_audioCall",@"chatBar_colorMore_location",@"chatBar_colorMore_video.png",@"chatBar_colorMore_video.png",@"chatBar_colorMore_video.png"]; 20 | BCKeyBoard *bc = [[BCKeyBoard alloc] initWithFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height - 46, [UIScreen mainScreen].bounds.size.width,46)]; 21 | bc.delegate = self; 22 | bc.imageArray = array; 23 | bc.placeholder = @"我来说几句"; 24 | bc.currentCtr = self; 25 | bc.placeholderColor = [UIColor colorWithRed:133/255 green:133/255 blue:133/255 alpha:0.5]; 26 | bc.backgroundColor = [UIColor clearColor]; 27 | [self.view addSubview:bc]; 28 | } 29 | - (void)didSendText:(NSString *)text 30 | { 31 | NSLog(@"%@",text); 32 | } 33 | - (void)returnHeight:(CGFloat)height 34 | { 35 | NSLog(@"%f",height); 36 | } 37 | - (void)returnImage:(UIImage *)image{ 38 | UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; 39 | imageView.image = image; 40 | [self.view addSubview:imageView]; 41 | } 42 | @end 43 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /BCKeyBoard/BCTextView.m: -------------------------------------------------------------------------------- 1 | // 2 | // BCTextView.m 3 | // BCDemo 4 | // 5 | // Created by baochao on 15/7/27. 6 | // Copyright (c) 2015年 baochao. All rights reserved. 7 | // 8 | 9 | #import "BCTextView.h" 10 | 11 | @interface BCTextView () 12 | 13 | @end 14 | 15 | @implementation BCTextView 16 | 17 | - (id)initWithFrame:(CGRect)frame 18 | { 19 | 20 | self = [super initWithFrame:frame]; 21 | if (self) { 22 | 23 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) 24 | name:UITextViewTextDidChangeNotification 25 | object:nil]; 26 | 27 | self.autoresizesSubviews = NO; 28 | self.placeholder = @""; 29 | self.placeholderColor = [UIColor lightGrayColor]; 30 | 31 | } 32 | return self; 33 | } 34 | - (void)drawRect:(CGRect)rect 35 | { 36 | //内容为空时才绘制placeholder 37 | if ([self.text isEqualToString:@""]) { 38 | CGRect placeholderRect; 39 | placeholderRect.origin.y = 8; 40 | placeholderRect.size.height = CGRectGetHeight(self.frame)-8; 41 | 42 | placeholderRect.origin.x = 5; 43 | placeholderRect.size.width = CGRectGetWidth(self.frame)-5; 44 | 45 | [self.placeholderColor set]; 46 | [self.placeholder drawInRect:placeholderRect 47 | withFont:self.font 48 | lineBreakMode:NSLineBreakByWordWrapping 49 | alignment:NSTextAlignmentLeft]; 50 | } 51 | } 52 | - (void)textChanged:(NSNotification *)not 53 | { 54 | [self setNeedsDisplay]; 55 | } 56 | 57 | - (void)setText:(NSString *)text 58 | { 59 | [super setText:text]; 60 | [self setNeedsDisplay]; 61 | } 62 | @end 63 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /BCKeyBoard/FaceVIew/DXFaceView.m: -------------------------------------------------------------------------------- 1 | /************************************************************ 2 | * * EaseMob CONFIDENTIAL 3 | * __________________ 4 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. 5 | * 6 | * NOTICE: All information contained herein is, and remains 7 | * the property of EaseMob Technologies. 8 | * Dissemination of this information or reproduction of this material 9 | * is strictly forbidden unless prior written permission is obtained 10 | * from EaseMob Technologies. 11 | */ 12 | 13 | #import "DXFaceView.h" 14 | 15 | @interface DXFaceView () 16 | { 17 | FacialView *_facialView; 18 | } 19 | 20 | @end 21 | 22 | @implementation DXFaceView 23 | 24 | - (id)initWithFrame:(CGRect)frame 25 | { 26 | self = [super initWithFrame:frame]; 27 | if (self) { 28 | _facialView = [[FacialView alloc] initWithFrame: CGRectMake(5, 5, frame.size.width - 10, self.bounds.size.height - 10)]; 29 | [_facialView loadFacialView:1 size:CGSizeMake(30, 30)]; 30 | _facialView.delegate = self; 31 | [self addSubview:_facialView]; 32 | } 33 | return self; 34 | } 35 | 36 | #pragma mark - FacialViewDelegate 37 | 38 | -(void)selectedFacialView:(NSString*)str{ 39 | if (_delegate) { 40 | [_delegate selectedFacialView:str isDelete:NO]; 41 | } 42 | } 43 | 44 | -(void)deleteSelected:(NSString *)str{ 45 | if (_delegate) { 46 | [_delegate selectedFacialView:str isDelete:YES]; 47 | } 48 | } 49 | 50 | - (void)sendFace 51 | { 52 | if (_delegate) { 53 | [_delegate sendFace]; 54 | } 55 | } 56 | 57 | #pragma mark - public 58 | 59 | - (BOOL)stringIsFace:(NSString *)string 60 | { 61 | if ([_facialView.faces containsObject:string]) { 62 | return YES; 63 | } 64 | 65 | return NO; 66 | } 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/FaceVIew/DXFaceView.m: -------------------------------------------------------------------------------- 1 | /************************************************************ 2 | * * EaseMob CONFIDENTIAL 3 | * __________________ 4 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. 5 | * 6 | * NOTICE: All information contained herein is, and remains 7 | * the property of EaseMob Technologies. 8 | * Dissemination of this information or reproduction of this material 9 | * is strictly forbidden unless prior written permission is obtained 10 | * from EaseMob Technologies. 11 | */ 12 | 13 | #import "DXFaceView.h" 14 | 15 | @interface DXFaceView () 16 | { 17 | FacialView *_facialView; 18 | } 19 | 20 | @end 21 | 22 | @implementation DXFaceView 23 | 24 | - (id)initWithFrame:(CGRect)frame 25 | { 26 | self = [super initWithFrame:frame]; 27 | if (self) { 28 | _facialView = [[FacialView alloc] initWithFrame: CGRectMake(5, 5, frame.size.width - 10, self.bounds.size.height - 10)]; 29 | [_facialView loadFacialView:1 size:CGSizeMake(30, 30)]; 30 | _facialView.delegate = self; 31 | [self addSubview:_facialView]; 32 | } 33 | return self; 34 | } 35 | 36 | #pragma mark - FacialViewDelegate 37 | 38 | -(void)selectedFacialView:(NSString*)str{ 39 | if (_delegate) { 40 | [_delegate selectedFacialView:str isDelete:NO]; 41 | } 42 | } 43 | 44 | -(void)deleteSelected:(NSString *)str{ 45 | if (_delegate) { 46 | [_delegate selectedFacialView:str isDelete:YES]; 47 | } 48 | } 49 | 50 | - (void)sendFace 51 | { 52 | if (_delegate) { 53 | [_delegate sendFace]; 54 | } 55 | } 56 | 57 | #pragma mark - public 58 | 59 | - (BOOL)stringIsFace:(NSString *)string 60 | { 61 | if ([_facialView.faces containsObject:string]) { 62 | return YES; 63 | } 64 | 65 | return NO; 66 | } 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/BCTextView.m: -------------------------------------------------------------------------------- 1 | // 2 | // BCTextView.m 3 | // BCDemo 4 | // 5 | // Created by baochao on 15/7/27. 6 | // Copyright (c) 2015年 baochao. All rights reserved. 7 | // 8 | 9 | #import "BCTextView.h" 10 | 11 | @interface BCTextView () 12 | 13 | @end 14 | 15 | @implementation BCTextView 16 | 17 | - (instancetype)initWithFrame:(CGRect)frame 18 | { 19 | 20 | self = [super initWithFrame:frame]; 21 | if (self) { 22 | 23 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) 24 | name:UITextViewTextDidChangeNotification 25 | object:nil]; 26 | 27 | self.autoresizesSubviews = NO; 28 | //默认字和颜色 29 | self.placeholder = @""; 30 | self.placeholderColor = [UIColor lightGrayColor]; 31 | 32 | } 33 | return self; 34 | } 35 | - (void)drawRect:(CGRect)rect 36 | { 37 | //内容为空时才绘制placeholder 38 | if ([self.text isEqualToString:@""]) { 39 | CGRect placeholderRect; 40 | placeholderRect.origin.y = 8; 41 | placeholderRect.size.height = CGRectGetHeight(self.frame)-8; 42 | 43 | placeholderRect.origin.x = 5; 44 | placeholderRect.size.width = CGRectGetWidth(self.frame)-5; 45 | 46 | [self.placeholderColor set]; 47 | [self.placeholder drawInRect:placeholderRect 48 | withFont:self.font 49 | lineBreakMode:NSLineBreakByWordWrapping 50 | alignment:NSTextAlignmentLeft]; 51 | } 52 | } 53 | - (void)textChanged:(NSNotification *)not 54 | { 55 | [self setNeedsDisplay]; 56 | } 57 | 58 | - (void)setText:(NSString *)text 59 | { 60 | [super setText:text]; 61 | [self setNeedsDisplay]; 62 | } 63 | @end 64 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // BCKeyBoardDemo 4 | // 5 | // Created by baochao on 15/7/29. 6 | // Copyright (c) 2015年 baochao. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | // Override point for customization after application launch. 20 | return YES; 21 | } 22 | 23 | - (void)applicationWillResignActive:(UIApplication *)application { 24 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 25 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 26 | } 27 | 28 | - (void)applicationDidEnterBackground:(UIApplication *)application { 29 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 30 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 31 | } 32 | 33 | - (void)applicationWillEnterForeground:(UIApplication *)application { 34 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 35 | } 36 | 37 | - (void)applicationDidBecomeActive:(UIApplication *)application { 38 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 39 | } 40 | 41 | - (void)applicationWillTerminate:(UIApplication *)application { 42 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /BCKeyBoard/FaceVIew/EmojiEmoticons.h: -------------------------------------------------------------------------------- 1 | // 2 | // EmojiEmoticons.h 3 | // Emoji 4 | // 5 | // Created by Aliksandr Andrashuk on 26.10.12. 6 | // Copyright (c) 2012 Aliksandr Andrashuk. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "Emoji.h" 11 | 12 | @interface EmojiEmoticons : NSObject 13 | 14 | + (NSArray *)allEmoticons; 15 | 16 | EMOJI_HMETHOD(grinningFace); 17 | EMOJI_HMETHOD(grinningFaceWithSmilingEyes); 18 | EMOJI_HMETHOD(faceWithTearsOfJoy); 19 | EMOJI_HMETHOD(smilingFaceWithOpenMouth); 20 | EMOJI_HMETHOD(smilingFaceWithOpenMouthAndSmilingEyes); 21 | EMOJI_HMETHOD(smilingFaceWithOpenMouthAndColdSweat); 22 | EMOJI_HMETHOD(smilingFaceWithOpenMouthAndTightlyClosedEyes); 23 | EMOJI_HMETHOD(smilingFaceWithHalo); 24 | EMOJI_HMETHOD(smilingFaceWithHorns); 25 | EMOJI_HMETHOD(winkingFace); 26 | EMOJI_HMETHOD(smilingFaceWithSmilingEyes); 27 | EMOJI_HMETHOD(faceSavouringDeliciousFood); 28 | EMOJI_HMETHOD(relievedFace); 29 | EMOJI_HMETHOD(smilingFaceWithHeartShapedEyes); 30 | EMOJI_HMETHOD(smilingFaceWithSunglasses); 31 | EMOJI_HMETHOD(smirkingFace); 32 | EMOJI_HMETHOD(neutralFace); 33 | EMOJI_HMETHOD(expressionlessFace); 34 | EMOJI_HMETHOD(unamusedFace); 35 | EMOJI_HMETHOD(faceWithColdSweat); 36 | EMOJI_HMETHOD(pensiveFace); 37 | EMOJI_HMETHOD(confusedFace); 38 | EMOJI_HMETHOD(confoundedFace); 39 | EMOJI_HMETHOD(kissingFace); 40 | EMOJI_HMETHOD(faceThrowingAKiss); 41 | EMOJI_HMETHOD(kissingFaceWithSmilingEyes); 42 | EMOJI_HMETHOD(kissingFaceWithClosedEyes); 43 | EMOJI_HMETHOD(faceWithStuckOutTongue); 44 | EMOJI_HMETHOD(faceWithStuckOutTongueAndWinkingEye); 45 | EMOJI_HMETHOD(faceWithStuckOutTongueAndTightlyClosedEyes); 46 | EMOJI_HMETHOD(disappointedFace); 47 | EMOJI_HMETHOD(worriedFace); 48 | EMOJI_HMETHOD(angryFace); 49 | EMOJI_HMETHOD(poutingFace); 50 | EMOJI_HMETHOD(cryingFace); 51 | EMOJI_HMETHOD(perseveringFace); 52 | EMOJI_HMETHOD(faceWithLookOfTriumph); 53 | EMOJI_HMETHOD(disappointedButRelievedFace); 54 | EMOJI_HMETHOD(frowningFaceWithOpenMouth); 55 | EMOJI_HMETHOD(anguishedFace); 56 | EMOJI_HMETHOD(fearfulFace); 57 | EMOJI_HMETHOD(wearyFace); 58 | EMOJI_HMETHOD(sleepyFace); 59 | EMOJI_HMETHOD(tiredFace); 60 | EMOJI_HMETHOD(grimacingFace); 61 | EMOJI_HMETHOD(loudlyCryingFace); 62 | EMOJI_HMETHOD(faceWithOpenMouth); 63 | EMOJI_HMETHOD(hushedFace); 64 | EMOJI_HMETHOD(faceWithOpenMouthAndColdSweat); 65 | EMOJI_HMETHOD(faceScreamingInFear); 66 | EMOJI_HMETHOD(astonishedFace); 67 | EMOJI_HMETHOD(flushedFace); 68 | EMOJI_HMETHOD(sleepingFace); 69 | EMOJI_HMETHOD(dizzyFace); 70 | EMOJI_HMETHOD(faceWithoutMouth); 71 | EMOJI_HMETHOD(faceWithMedicalMask); 72 | EMOJI_HMETHOD(grinningCatFaceWithSmilingEyes); 73 | EMOJI_HMETHOD(catFaceWithTearsOfJoy); 74 | EMOJI_HMETHOD(smilingCatFaceWithOpenMouth); 75 | EMOJI_HMETHOD(smilingCatFaceWithHeartShapedEyes); 76 | EMOJI_HMETHOD(catFaceWithWrySmile); 77 | EMOJI_HMETHOD(kissingCatFaceWithClosedEyes); 78 | EMOJI_HMETHOD(poutingCatFace); 79 | EMOJI_HMETHOD(cryingCatFace); 80 | EMOJI_HMETHOD(wearyCatFace); 81 | EMOJI_HMETHOD(faceWithNoGoodGesture); 82 | EMOJI_HMETHOD(faceWithOkGesture); 83 | EMOJI_HMETHOD(personBowingDeeply); 84 | EMOJI_HMETHOD(seeNoEvilMonkey); 85 | EMOJI_HMETHOD(hearNoEvilMonkey); 86 | EMOJI_HMETHOD(speakNoEvilMonkey); 87 | EMOJI_HMETHOD(happyPersonRaisingOneHand); 88 | EMOJI_HMETHOD(personRaisingBothHandsInCelebration); 89 | EMOJI_HMETHOD(personFrowning); 90 | EMOJI_HMETHOD(personWithPoutingFace); 91 | EMOJI_HMETHOD(personWithFoldedHands); 92 | @end 93 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/FaceVIew/EmojiEmoticons.h: -------------------------------------------------------------------------------- 1 | // 2 | // EmojiEmoticons.h 3 | // Emoji 4 | // 5 | // Created by Aliksandr Andrashuk on 26.10.12. 6 | // Copyright (c) 2012 Aliksandr Andrashuk. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "Emoji.h" 11 | 12 | @interface EmojiEmoticons : NSObject 13 | 14 | + (NSArray *)allEmoticons; 15 | 16 | EMOJI_HMETHOD(grinningFace); 17 | EMOJI_HMETHOD(grinningFaceWithSmilingEyes); 18 | EMOJI_HMETHOD(faceWithTearsOfJoy); 19 | EMOJI_HMETHOD(smilingFaceWithOpenMouth); 20 | EMOJI_HMETHOD(smilingFaceWithOpenMouthAndSmilingEyes); 21 | EMOJI_HMETHOD(smilingFaceWithOpenMouthAndColdSweat); 22 | EMOJI_HMETHOD(smilingFaceWithOpenMouthAndTightlyClosedEyes); 23 | EMOJI_HMETHOD(smilingFaceWithHalo); 24 | EMOJI_HMETHOD(smilingFaceWithHorns); 25 | EMOJI_HMETHOD(winkingFace); 26 | EMOJI_HMETHOD(smilingFaceWithSmilingEyes); 27 | EMOJI_HMETHOD(faceSavouringDeliciousFood); 28 | EMOJI_HMETHOD(relievedFace); 29 | EMOJI_HMETHOD(smilingFaceWithHeartShapedEyes); 30 | EMOJI_HMETHOD(smilingFaceWithSunglasses); 31 | EMOJI_HMETHOD(smirkingFace); 32 | EMOJI_HMETHOD(neutralFace); 33 | EMOJI_HMETHOD(expressionlessFace); 34 | EMOJI_HMETHOD(unamusedFace); 35 | EMOJI_HMETHOD(faceWithColdSweat); 36 | EMOJI_HMETHOD(pensiveFace); 37 | EMOJI_HMETHOD(confusedFace); 38 | EMOJI_HMETHOD(confoundedFace); 39 | EMOJI_HMETHOD(kissingFace); 40 | EMOJI_HMETHOD(faceThrowingAKiss); 41 | EMOJI_HMETHOD(kissingFaceWithSmilingEyes); 42 | EMOJI_HMETHOD(kissingFaceWithClosedEyes); 43 | EMOJI_HMETHOD(faceWithStuckOutTongue); 44 | EMOJI_HMETHOD(faceWithStuckOutTongueAndWinkingEye); 45 | EMOJI_HMETHOD(faceWithStuckOutTongueAndTightlyClosedEyes); 46 | EMOJI_HMETHOD(disappointedFace); 47 | EMOJI_HMETHOD(worriedFace); 48 | EMOJI_HMETHOD(angryFace); 49 | EMOJI_HMETHOD(poutingFace); 50 | EMOJI_HMETHOD(cryingFace); 51 | EMOJI_HMETHOD(perseveringFace); 52 | EMOJI_HMETHOD(faceWithLookOfTriumph); 53 | EMOJI_HMETHOD(disappointedButRelievedFace); 54 | EMOJI_HMETHOD(frowningFaceWithOpenMouth); 55 | EMOJI_HMETHOD(anguishedFace); 56 | EMOJI_HMETHOD(fearfulFace); 57 | EMOJI_HMETHOD(wearyFace); 58 | EMOJI_HMETHOD(sleepyFace); 59 | EMOJI_HMETHOD(tiredFace); 60 | EMOJI_HMETHOD(grimacingFace); 61 | EMOJI_HMETHOD(loudlyCryingFace); 62 | EMOJI_HMETHOD(faceWithOpenMouth); 63 | EMOJI_HMETHOD(hushedFace); 64 | EMOJI_HMETHOD(faceWithOpenMouthAndColdSweat); 65 | EMOJI_HMETHOD(faceScreamingInFear); 66 | EMOJI_HMETHOD(astonishedFace); 67 | EMOJI_HMETHOD(flushedFace); 68 | EMOJI_HMETHOD(sleepingFace); 69 | EMOJI_HMETHOD(dizzyFace); 70 | EMOJI_HMETHOD(faceWithoutMouth); 71 | EMOJI_HMETHOD(faceWithMedicalMask); 72 | EMOJI_HMETHOD(grinningCatFaceWithSmilingEyes); 73 | EMOJI_HMETHOD(catFaceWithTearsOfJoy); 74 | EMOJI_HMETHOD(smilingCatFaceWithOpenMouth); 75 | EMOJI_HMETHOD(smilingCatFaceWithHeartShapedEyes); 76 | EMOJI_HMETHOD(catFaceWithWrySmile); 77 | EMOJI_HMETHOD(kissingCatFaceWithClosedEyes); 78 | EMOJI_HMETHOD(poutingCatFace); 79 | EMOJI_HMETHOD(cryingCatFace); 80 | EMOJI_HMETHOD(wearyCatFace); 81 | EMOJI_HMETHOD(faceWithNoGoodGesture); 82 | EMOJI_HMETHOD(faceWithOkGesture); 83 | EMOJI_HMETHOD(personBowingDeeply); 84 | EMOJI_HMETHOD(seeNoEvilMonkey); 85 | EMOJI_HMETHOD(hearNoEvilMonkey); 86 | EMOJI_HMETHOD(speakNoEvilMonkey); 87 | EMOJI_HMETHOD(happyPersonRaisingOneHand); 88 | EMOJI_HMETHOD(personRaisingBothHandsInCelebration); 89 | EMOJI_HMETHOD(personFrowning); 90 | EMOJI_HMETHOD(personWithPoutingFace); 91 | EMOJI_HMETHOD(personWithFoldedHands); 92 | @end 93 | -------------------------------------------------------------------------------- /BCKeyBoard/FaceVIew/FacialView.m: -------------------------------------------------------------------------------- 1 | /************************************************************ 2 | * * EaseMob CONFIDENTIAL 3 | * __________________ 4 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. 5 | * 6 | * NOTICE: All information contained herein is, and remains 7 | * the property of EaseMob Technologies. 8 | * Dissemination of this information or reproduction of this material 9 | * is strictly forbidden unless prior written permission is obtained 10 | * from EaseMob Technologies. 11 | */ 12 | 13 | #import "FacialView.h" 14 | #import "Emoji.h" 15 | 16 | @interface FacialView () 17 | 18 | @end 19 | 20 | @implementation FacialView 21 | 22 | - (id)initWithFrame:(CGRect)frame 23 | { 24 | self = [super initWithFrame:frame]; 25 | if (self) { 26 | _faces = [Emoji allEmoji]; 27 | } 28 | return self; 29 | } 30 | 31 | 32 | //给faces设置位置 33 | -(void)loadFacialView:(int)page size:(CGSize)size 34 | { 35 | int maxRow = 5; 36 | int maxCol = 8; 37 | CGFloat itemWidth = self.frame.size.width / maxCol; 38 | CGFloat itemHeight = self.frame.size.height / maxRow; 39 | 40 | UIButton *deleteButton = [UIButton buttonWithType:UIButtonTypeCustom]; 41 | [deleteButton setBackgroundColor:[UIColor clearColor]]; 42 | [deleteButton setFrame:CGRectMake((maxCol - 1) * itemWidth, (maxRow - 1) * itemHeight, itemWidth, itemHeight)]; 43 | [deleteButton setImage:[UIImage imageNamed:@"faceDelete"] forState:UIControlStateNormal]; 44 | deleteButton.tag = 10000; 45 | [deleteButton addTarget:self action:@selector(selected:) forControlEvents:UIControlEventTouchUpInside]; 46 | [self addSubview:deleteButton]; 47 | 48 | UIButton *sendButton = [UIButton buttonWithType:UIButtonTypeCustom]; 49 | [sendButton setTitle:NSLocalizedString(@"send", @"Send") forState:UIControlStateNormal]; 50 | [sendButton setFrame:CGRectMake((maxCol - 2) * itemWidth+20, (maxRow - 1) * itemHeight + 5, itemWidth + 10, itemHeight - 10)]; 51 | [sendButton addTarget:self action:@selector(sendAction:) forControlEvents:UIControlEventTouchUpInside]; 52 | [sendButton setBackgroundColor:[UIColor colorWithRed:10 / 255.0 green:82 / 255.0 blue:104 / 255.0 alpha:1.0]]; 53 | [self addSubview:sendButton]; 54 | 55 | for (int row = 0; row < maxRow; row++) { 56 | for (int col = 0; col < maxCol; col++) { 57 | int index = row * maxCol + col; 58 | if (index < [_faces count]) { 59 | UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 60 | [button setBackgroundColor:[UIColor clearColor]]; 61 | [button setFrame:CGRectMake(col * itemWidth, row * itemHeight, itemWidth, itemHeight)]; 62 | [button.titleLabel setFont:[UIFont fontWithName:@"AppleColorEmoji" size:29.0]]; 63 | [button setTitle: [_faces objectAtIndex:(row * maxCol + col)] forState:UIControlStateNormal]; 64 | button.tag = row * maxCol + col; 65 | [button addTarget:self action:@selector(selected:) forControlEvents:UIControlEventTouchUpInside]; 66 | [self addSubview:button]; 67 | } 68 | else{ 69 | break; 70 | } 71 | } 72 | } 73 | } 74 | 75 | 76 | -(void)selected:(UIButton*)bt 77 | { 78 | if (bt.tag == 10000 && _delegate) { 79 | [_delegate deleteSelected:nil]; 80 | }else{ 81 | NSString *str = [_faces objectAtIndex:bt.tag]; 82 | if (_delegate) { 83 | [_delegate selectedFacialView:str]; 84 | } 85 | } 86 | } 87 | 88 | - (void)sendAction:(id)sender 89 | { 90 | if (_delegate) { 91 | [_delegate sendFace]; 92 | } 93 | } 94 | 95 | @end 96 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/FaceVIew/FacialView.m: -------------------------------------------------------------------------------- 1 | /************************************************************ 2 | * * EaseMob CONFIDENTIAL 3 | * __________________ 4 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. 5 | * 6 | * NOTICE: All information contained herein is, and remains 7 | * the property of EaseMob Technologies. 8 | * Dissemination of this information or reproduction of this material 9 | * is strictly forbidden unless prior written permission is obtained 10 | * from EaseMob Technologies. 11 | */ 12 | 13 | #import "FacialView.h" 14 | #import "Emoji.h" 15 | 16 | @interface FacialView () 17 | 18 | @end 19 | 20 | @implementation FacialView 21 | 22 | - (id)initWithFrame:(CGRect)frame 23 | { 24 | self = [super initWithFrame:frame]; 25 | if (self) { 26 | _faces = [Emoji allEmoji]; 27 | } 28 | return self; 29 | } 30 | 31 | 32 | //给faces设置位置 33 | -(void)loadFacialView:(int)page size:(CGSize)size 34 | { 35 | int maxRow = 5; 36 | int maxCol = 8; 37 | CGFloat itemWidth = self.frame.size.width / maxCol; 38 | CGFloat itemHeight = self.frame.size.height / maxRow; 39 | 40 | UIButton *deleteButton = [UIButton buttonWithType:UIButtonTypeCustom]; 41 | [deleteButton setBackgroundColor:[UIColor clearColor]]; 42 | [deleteButton setFrame:CGRectMake((maxCol - 1) * itemWidth, (maxRow - 1) * itemHeight, itemWidth, itemHeight)]; 43 | [deleteButton setImage:[UIImage imageNamed:@"faceDelete"] forState:UIControlStateNormal]; 44 | deleteButton.tag = 10000; 45 | [deleteButton addTarget:self action:@selector(selected:) forControlEvents:UIControlEventTouchUpInside]; 46 | [self addSubview:deleteButton]; 47 | 48 | UIButton *sendButton = [UIButton buttonWithType:UIButtonTypeCustom]; 49 | [sendButton setTitle:NSLocalizedString(@"send", @"Send") forState:UIControlStateNormal]; 50 | [sendButton setFrame:CGRectMake((maxCol - 2) * itemWidth - 10, (maxRow - 1) * itemHeight + 5, itemWidth + 10, itemHeight - 10)]; 51 | [sendButton addTarget:self action:@selector(sendAction:) forControlEvents:UIControlEventTouchUpInside]; 52 | [sendButton setBackgroundColor:[UIColor colorWithRed:10 / 255.0 green:82 / 255.0 blue:104 / 255.0 alpha:1.0]]; 53 | [self addSubview:sendButton]; 54 | 55 | for (int row = 0; row < maxRow; row++) { 56 | for (int col = 0; col < maxCol; col++) { 57 | int index = row * maxCol + col; 58 | if (index < [_faces count]) { 59 | UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 60 | [button setBackgroundColor:[UIColor clearColor]]; 61 | [button setFrame:CGRectMake(col * itemWidth, row * itemHeight, itemWidth, itemHeight)]; 62 | [button.titleLabel setFont:[UIFont fontWithName:@"AppleColorEmoji" size:29.0]]; 63 | [button setTitle: [_faces objectAtIndex:(row * maxCol + col)] forState:UIControlStateNormal]; 64 | button.tag = row * maxCol + col; 65 | [button addTarget:self action:@selector(selected:) forControlEvents:UIControlEventTouchUpInside]; 66 | [self addSubview:button]; 67 | } 68 | else{ 69 | break; 70 | } 71 | } 72 | } 73 | } 74 | 75 | 76 | -(void)selected:(UIButton*)bt 77 | { 78 | if (bt.tag == 10000 && _delegate) { 79 | [_delegate deleteSelected:nil]; 80 | }else{ 81 | NSString *str = [_faces objectAtIndex:bt.tag]; 82 | if (_delegate) { 83 | [_delegate selectedFacialView:str]; 84 | } 85 | } 86 | } 87 | 88 | - (void)sendAction:(id)sender 89 | { 90 | if (_delegate) { 91 | [_delegate sendFace]; 92 | } 93 | } 94 | 95 | @end 96 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo.xcodeproj/xcuserdata/baochao.xcuserdatad/xcschemes/BCKeyBoardDemo.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 43 | 49 | 50 | 51 | 52 | 53 | 59 | 60 | 61 | 62 | 63 | 64 | 74 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 93 | 95 | 101 | 102 | 103 | 104 | 106 | 107 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /BCKeyBoard/FaceVIew/EmojiEmoticons.m: -------------------------------------------------------------------------------- 1 | // 2 | // EmojiEmoticons.m 3 | // Emoji 4 | // 5 | // Created by Aliksandr Andrashuk on 26.10.12. 6 | // Copyright (c) 2012 Aliksandr Andrashuk. All rights reserved. 7 | // 8 | 9 | #import "EmojiEmoticons.h" 10 | 11 | @implementation EmojiEmoticons 12 | 13 | + (NSArray *)allEmoticons { 14 | NSMutableArray *array = [NSMutableArray new]; 15 | NSMutableArray * localAry = [[NSMutableArray alloc] initWithObjects: 16 | [Emoji emojiWithCode:0x1F60a], 17 | [Emoji emojiWithCode:0x1F603], 18 | [Emoji emojiWithCode:0x1F609], 19 | [Emoji emojiWithCode:0x1F62e], 20 | [Emoji emojiWithCode:0x1F60b], 21 | [Emoji emojiWithCode:0x1F60e], 22 | [Emoji emojiWithCode:0x1F621], 23 | [Emoji emojiWithCode:0x1F616], 24 | [Emoji emojiWithCode:0x1F633], 25 | [Emoji emojiWithCode:0x1F61e], 26 | [Emoji emojiWithCode:0x1F62d], 27 | [Emoji emojiWithCode:0x1F610], 28 | [Emoji emojiWithCode:0x1F607], 29 | [Emoji emojiWithCode:0x1F62c], 30 | [Emoji emojiWithCode:0x1F606], 31 | [Emoji emojiWithCode:0x1F631], 32 | [Emoji emojiWithCode:0x1F385], 33 | [Emoji emojiWithCode:0x1F634], 34 | [Emoji emojiWithCode:0x1F615], 35 | [Emoji emojiWithCode:0x1F637], 36 | [Emoji emojiWithCode:0x1F62f], 37 | [Emoji emojiWithCode:0x1F60f], 38 | [Emoji emojiWithCode:0x1F611], 39 | [Emoji emojiWithCode:0x1F496], 40 | [Emoji emojiWithCode:0x1F494], 41 | [Emoji emojiWithCode:0x1F319], 42 | [Emoji emojiWithCode:0x1f31f], 43 | [Emoji emojiWithCode:0x1f31e], 44 | [Emoji emojiWithCode:0x1F308], 45 | [Emoji emojiWithCode:0x1F60d], 46 | [Emoji emojiWithCode:0x1F61a], 47 | [Emoji emojiWithCode:0x1F48b], 48 | [Emoji emojiWithCode:0x1F339], 49 | [Emoji emojiWithCode:0x1F342], 50 | [Emoji emojiWithCode:0x1F44d], 51 | 52 | /*[Emoji emojiWithCode:0x1F602], 53 | [Emoji emojiWithCode:0x1F603], 54 | [Emoji emojiWithCode:0x1F604], 55 | [Emoji emojiWithCode:0x1F609], 56 | [Emoji emojiWithCode:0x1F613], 57 | [Emoji emojiWithCode:0x1F614], 58 | [Emoji emojiWithCode:0x1F616], 59 | [Emoji emojiWithCode:0x1F618], 60 | [Emoji emojiWithCode:0x1F61a], 61 | [Emoji emojiWithCode:0x1F61c], 62 | [Emoji emojiWithCode:0x1F61d], 63 | [Emoji emojiWithCode:0x1F61e], 64 | [Emoji emojiWithCode:0x1F620], 65 | [Emoji emojiWithCode:0x1F621], 66 | [Emoji emojiWithCode:0x1F622], 67 | [Emoji emojiWithCode:0x1F623], 68 | [Emoji emojiWithCode:0x1F628], 69 | [Emoji emojiWithCode:0x1F62a], 70 | [Emoji emojiWithCode:0x1F62d], 71 | [Emoji emojiWithCode:0x1F630], 72 | [Emoji emojiWithCode:0x1F631], 73 | [Emoji emojiWithCode:0x1F632], 74 | [Emoji emojiWithCode:0x1F633], 75 | [Emoji emojiWithCode:0x1F645], 76 | [Emoji emojiWithCode:0x1F646], 77 | [Emoji emojiWithCode:0x1F647], 78 | [Emoji emojiWithCode:0x1F64c], 79 | [Emoji emojiWithCode:0x1F6a5], 80 | [Emoji emojiWithCode:0x1F6a7], 81 | [Emoji emojiWithCode:0x1F6b2], 82 | [Emoji emojiWithCode:0x1F6b6], 83 | [Emoji emojiWithCode:0x1F302], 84 | [Emoji emojiWithCode:0x1F319], 85 | [Emoji emojiWithCode:0x1F31f],*/ 86 | nil]; 87 | [array addObjectsFromArray:localAry]; 88 | // for (int i=0x1F600; i<=0x1F64F; i++) { 89 | // if (i < 0x1F641 || i > 0x1F644) { 90 | // [array addObject:[Emoji emojiWithCode:i]]; 91 | // } 92 | // } 93 | return array; 94 | } 95 | 96 | EMOJI_METHOD(grinningFace,1F600); 97 | EMOJI_METHOD(grinningFaceWithSmilingEyes,1F601); 98 | EMOJI_METHOD(faceWithTearsOfJoy,1F602); 99 | EMOJI_METHOD(smilingFaceWithOpenMouth,1F603); 100 | EMOJI_METHOD(smilingFaceWithOpenMouthAndSmilingEyes,1F604); 101 | EMOJI_METHOD(smilingFaceWithOpenMouthAndColdSweat,1F605); 102 | EMOJI_METHOD(smilingFaceWithOpenMouthAndTightlyClosedEyes,1F606); 103 | EMOJI_METHOD(smilingFaceWithHalo,1F607); 104 | EMOJI_METHOD(smilingFaceWithHorns,1F608); 105 | EMOJI_METHOD(winkingFace,1F609); 106 | EMOJI_METHOD(smilingFaceWithSmilingEyes,1F60A); 107 | EMOJI_METHOD(faceSavouringDeliciousFood,1F60B); 108 | EMOJI_METHOD(relievedFace,1F60C); 109 | EMOJI_METHOD(smilingFaceWithHeartShapedEyes,1F60D); 110 | EMOJI_METHOD(smilingFaceWithSunglasses,1F60E); 111 | EMOJI_METHOD(smirkingFace,1F60F); 112 | EMOJI_METHOD(neutralFace,1F610); 113 | EMOJI_METHOD(expressionlessFace,1F611); 114 | EMOJI_METHOD(unamusedFace,1F612); 115 | EMOJI_METHOD(faceWithColdSweat,1F613); 116 | EMOJI_METHOD(pensiveFace,1F614); 117 | EMOJI_METHOD(confusedFace,1F615); 118 | EMOJI_METHOD(confoundedFace,1F616); 119 | EMOJI_METHOD(kissingFace,1F617); 120 | EMOJI_METHOD(faceThrowingAKiss,1F618); 121 | EMOJI_METHOD(kissingFaceWithSmilingEyes,1F619); 122 | EMOJI_METHOD(kissingFaceWithClosedEyes,1F61A); 123 | EMOJI_METHOD(faceWithStuckOutTongue,1F61B); 124 | EMOJI_METHOD(faceWithStuckOutTongueAndWinkingEye,1F61C); 125 | EMOJI_METHOD(faceWithStuckOutTongueAndTightlyClosedEyes,1F61D); 126 | EMOJI_METHOD(disappointedFace,1F61E); 127 | EMOJI_METHOD(worriedFace,1F61F); 128 | EMOJI_METHOD(angryFace,1F620); 129 | EMOJI_METHOD(poutingFace,1F621); 130 | EMOJI_METHOD(cryingFace,1F622); 131 | EMOJI_METHOD(perseveringFace,1F623); 132 | EMOJI_METHOD(faceWithLookOfTriumph,1F624); 133 | EMOJI_METHOD(disappointedButRelievedFace,1F625); 134 | EMOJI_METHOD(frowningFaceWithOpenMouth,1F626); 135 | EMOJI_METHOD(anguishedFace,1F627); 136 | EMOJI_METHOD(fearfulFace,1F628); 137 | EMOJI_METHOD(wearyFace,1F629); 138 | EMOJI_METHOD(sleepyFace,1F62A); 139 | EMOJI_METHOD(tiredFace,1F62B); 140 | EMOJI_METHOD(grimacingFace,1F62C); 141 | EMOJI_METHOD(loudlyCryingFace,1F62D); 142 | EMOJI_METHOD(faceWithOpenMouth,1F62E); 143 | EMOJI_METHOD(hushedFace,1F62F); 144 | EMOJI_METHOD(faceWithOpenMouthAndColdSweat,1F630); 145 | EMOJI_METHOD(faceScreamingInFear,1F631); 146 | EMOJI_METHOD(astonishedFace,1F632); 147 | EMOJI_METHOD(flushedFace,1F633); 148 | EMOJI_METHOD(sleepingFace,1F634); 149 | EMOJI_METHOD(dizzyFace,1F635); 150 | EMOJI_METHOD(faceWithoutMouth,1F636); 151 | EMOJI_METHOD(faceWithMedicalMask,1F637); 152 | EMOJI_METHOD(grinningCatFaceWithSmilingEyes,1F638); 153 | EMOJI_METHOD(catFaceWithTearsOfJoy,1F639); 154 | EMOJI_METHOD(smilingCatFaceWithOpenMouth,1F63A); 155 | EMOJI_METHOD(smilingCatFaceWithHeartShapedEyes,1F63B); 156 | EMOJI_METHOD(catFaceWithWrySmile,1F63C); 157 | EMOJI_METHOD(kissingCatFaceWithClosedEyes,1F63D); 158 | EMOJI_METHOD(poutingCatFace,1F63E); 159 | EMOJI_METHOD(cryingCatFace,1F63F); 160 | EMOJI_METHOD(wearyCatFace,1F640); 161 | EMOJI_METHOD(faceWithNoGoodGesture,1F645); 162 | EMOJI_METHOD(faceWithOkGesture,1F646); 163 | EMOJI_METHOD(personBowingDeeply,1F647); 164 | EMOJI_METHOD(seeNoEvilMonkey,1F648); 165 | EMOJI_METHOD(hearNoEvilMonkey,1F649); 166 | EMOJI_METHOD(speakNoEvilMonkey,1F64A); 167 | EMOJI_METHOD(happyPersonRaisingOneHand,1F64B); 168 | EMOJI_METHOD(personRaisingBothHandsInCelebration,1F64C); 169 | EMOJI_METHOD(personFrowning,1F64D); 170 | EMOJI_METHOD(personWithPoutingFace,1F64E); 171 | EMOJI_METHOD(personWithFoldedHands,1F64F); 172 | @end 173 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/FaceVIew/EmojiEmoticons.m: -------------------------------------------------------------------------------- 1 | // 2 | // EmojiEmoticons.m 3 | // Emoji 4 | // 5 | // Created by Aliksandr Andrashuk on 26.10.12. 6 | // Copyright (c) 2012 Aliksandr Andrashuk. All rights reserved. 7 | // 8 | 9 | #import "EmojiEmoticons.h" 10 | 11 | @implementation EmojiEmoticons 12 | 13 | + (NSArray *)allEmoticons { 14 | NSMutableArray *array = [NSMutableArray new]; 15 | NSMutableArray * localAry = [[NSMutableArray alloc] initWithObjects: 16 | [Emoji emojiWithCode:0x1F60a], 17 | [Emoji emojiWithCode:0x1F603], 18 | [Emoji emojiWithCode:0x1F609], 19 | [Emoji emojiWithCode:0x1F62e], 20 | [Emoji emojiWithCode:0x1F60b], 21 | [Emoji emojiWithCode:0x1F60e], 22 | [Emoji emojiWithCode:0x1F621], 23 | [Emoji emojiWithCode:0x1F616], 24 | [Emoji emojiWithCode:0x1F633], 25 | [Emoji emojiWithCode:0x1F61e], 26 | [Emoji emojiWithCode:0x1F62d], 27 | [Emoji emojiWithCode:0x1F610], 28 | [Emoji emojiWithCode:0x1F607], 29 | [Emoji emojiWithCode:0x1F62c], 30 | [Emoji emojiWithCode:0x1F606], 31 | [Emoji emojiWithCode:0x1F631], 32 | [Emoji emojiWithCode:0x1F385], 33 | [Emoji emojiWithCode:0x1F634], 34 | [Emoji emojiWithCode:0x1F615], 35 | [Emoji emojiWithCode:0x1F637], 36 | [Emoji emojiWithCode:0x1F62f], 37 | [Emoji emojiWithCode:0x1F60f], 38 | [Emoji emojiWithCode:0x1F611], 39 | [Emoji emojiWithCode:0x1F496], 40 | [Emoji emojiWithCode:0x1F494], 41 | [Emoji emojiWithCode:0x1F319], 42 | [Emoji emojiWithCode:0x1f31f], 43 | [Emoji emojiWithCode:0x1f31e], 44 | [Emoji emojiWithCode:0x1F308], 45 | [Emoji emojiWithCode:0x1F60d], 46 | [Emoji emojiWithCode:0x1F61a], 47 | [Emoji emojiWithCode:0x1F48b], 48 | [Emoji emojiWithCode:0x1F339], 49 | [Emoji emojiWithCode:0x1F342], 50 | [Emoji emojiWithCode:0x1F44d], 51 | 52 | /*[Emoji emojiWithCode:0x1F602], 53 | [Emoji emojiWithCode:0x1F603], 54 | [Emoji emojiWithCode:0x1F604], 55 | [Emoji emojiWithCode:0x1F609], 56 | [Emoji emojiWithCode:0x1F613], 57 | [Emoji emojiWithCode:0x1F614], 58 | [Emoji emojiWithCode:0x1F616], 59 | [Emoji emojiWithCode:0x1F618], 60 | [Emoji emojiWithCode:0x1F61a], 61 | [Emoji emojiWithCode:0x1F61c], 62 | [Emoji emojiWithCode:0x1F61d], 63 | [Emoji emojiWithCode:0x1F61e], 64 | [Emoji emojiWithCode:0x1F620], 65 | [Emoji emojiWithCode:0x1F621], 66 | [Emoji emojiWithCode:0x1F622], 67 | [Emoji emojiWithCode:0x1F623], 68 | [Emoji emojiWithCode:0x1F628], 69 | [Emoji emojiWithCode:0x1F62a], 70 | [Emoji emojiWithCode:0x1F62d], 71 | [Emoji emojiWithCode:0x1F630], 72 | [Emoji emojiWithCode:0x1F631], 73 | [Emoji emojiWithCode:0x1F632], 74 | [Emoji emojiWithCode:0x1F633], 75 | [Emoji emojiWithCode:0x1F645], 76 | [Emoji emojiWithCode:0x1F646], 77 | [Emoji emojiWithCode:0x1F647], 78 | [Emoji emojiWithCode:0x1F64c], 79 | [Emoji emojiWithCode:0x1F6a5], 80 | [Emoji emojiWithCode:0x1F6a7], 81 | [Emoji emojiWithCode:0x1F6b2], 82 | [Emoji emojiWithCode:0x1F6b6], 83 | [Emoji emojiWithCode:0x1F302], 84 | [Emoji emojiWithCode:0x1F319], 85 | [Emoji emojiWithCode:0x1F31f],*/ 86 | nil]; 87 | [array addObjectsFromArray:localAry]; 88 | // for (int i=0x1F600; i<=0x1F64F; i++) { 89 | // if (i < 0x1F641 || i > 0x1F644) { 90 | // [array addObject:[Emoji emojiWithCode:i]]; 91 | // } 92 | // } 93 | return array; 94 | } 95 | 96 | EMOJI_METHOD(grinningFace,1F600); 97 | EMOJI_METHOD(grinningFaceWithSmilingEyes,1F601); 98 | EMOJI_METHOD(faceWithTearsOfJoy,1F602); 99 | EMOJI_METHOD(smilingFaceWithOpenMouth,1F603); 100 | EMOJI_METHOD(smilingFaceWithOpenMouthAndSmilingEyes,1F604); 101 | EMOJI_METHOD(smilingFaceWithOpenMouthAndColdSweat,1F605); 102 | EMOJI_METHOD(smilingFaceWithOpenMouthAndTightlyClosedEyes,1F606); 103 | EMOJI_METHOD(smilingFaceWithHalo,1F607); 104 | EMOJI_METHOD(smilingFaceWithHorns,1F608); 105 | EMOJI_METHOD(winkingFace,1F609); 106 | EMOJI_METHOD(smilingFaceWithSmilingEyes,1F60A); 107 | EMOJI_METHOD(faceSavouringDeliciousFood,1F60B); 108 | EMOJI_METHOD(relievedFace,1F60C); 109 | EMOJI_METHOD(smilingFaceWithHeartShapedEyes,1F60D); 110 | EMOJI_METHOD(smilingFaceWithSunglasses,1F60E); 111 | EMOJI_METHOD(smirkingFace,1F60F); 112 | EMOJI_METHOD(neutralFace,1F610); 113 | EMOJI_METHOD(expressionlessFace,1F611); 114 | EMOJI_METHOD(unamusedFace,1F612); 115 | EMOJI_METHOD(faceWithColdSweat,1F613); 116 | EMOJI_METHOD(pensiveFace,1F614); 117 | EMOJI_METHOD(confusedFace,1F615); 118 | EMOJI_METHOD(confoundedFace,1F616); 119 | EMOJI_METHOD(kissingFace,1F617); 120 | EMOJI_METHOD(faceThrowingAKiss,1F618); 121 | EMOJI_METHOD(kissingFaceWithSmilingEyes,1F619); 122 | EMOJI_METHOD(kissingFaceWithClosedEyes,1F61A); 123 | EMOJI_METHOD(faceWithStuckOutTongue,1F61B); 124 | EMOJI_METHOD(faceWithStuckOutTongueAndWinkingEye,1F61C); 125 | EMOJI_METHOD(faceWithStuckOutTongueAndTightlyClosedEyes,1F61D); 126 | EMOJI_METHOD(disappointedFace,1F61E); 127 | EMOJI_METHOD(worriedFace,1F61F); 128 | EMOJI_METHOD(angryFace,1F620); 129 | EMOJI_METHOD(poutingFace,1F621); 130 | EMOJI_METHOD(cryingFace,1F622); 131 | EMOJI_METHOD(perseveringFace,1F623); 132 | EMOJI_METHOD(faceWithLookOfTriumph,1F624); 133 | EMOJI_METHOD(disappointedButRelievedFace,1F625); 134 | EMOJI_METHOD(frowningFaceWithOpenMouth,1F626); 135 | EMOJI_METHOD(anguishedFace,1F627); 136 | EMOJI_METHOD(fearfulFace,1F628); 137 | EMOJI_METHOD(wearyFace,1F629); 138 | EMOJI_METHOD(sleepyFace,1F62A); 139 | EMOJI_METHOD(tiredFace,1F62B); 140 | EMOJI_METHOD(grimacingFace,1F62C); 141 | EMOJI_METHOD(loudlyCryingFace,1F62D); 142 | EMOJI_METHOD(faceWithOpenMouth,1F62E); 143 | EMOJI_METHOD(hushedFace,1F62F); 144 | EMOJI_METHOD(faceWithOpenMouthAndColdSweat,1F630); 145 | EMOJI_METHOD(faceScreamingInFear,1F631); 146 | EMOJI_METHOD(astonishedFace,1F632); 147 | EMOJI_METHOD(flushedFace,1F633); 148 | EMOJI_METHOD(sleepingFace,1F634); 149 | EMOJI_METHOD(dizzyFace,1F635); 150 | EMOJI_METHOD(faceWithoutMouth,1F636); 151 | EMOJI_METHOD(faceWithMedicalMask,1F637); 152 | EMOJI_METHOD(grinningCatFaceWithSmilingEyes,1F638); 153 | EMOJI_METHOD(catFaceWithTearsOfJoy,1F639); 154 | EMOJI_METHOD(smilingCatFaceWithOpenMouth,1F63A); 155 | EMOJI_METHOD(smilingCatFaceWithHeartShapedEyes,1F63B); 156 | EMOJI_METHOD(catFaceWithWrySmile,1F63C); 157 | EMOJI_METHOD(kissingCatFaceWithClosedEyes,1F63D); 158 | EMOJI_METHOD(poutingCatFace,1F63E); 159 | EMOJI_METHOD(cryingCatFace,1F63F); 160 | EMOJI_METHOD(wearyCatFace,1F640); 161 | EMOJI_METHOD(faceWithNoGoodGesture,1F645); 162 | EMOJI_METHOD(faceWithOkGesture,1F646); 163 | EMOJI_METHOD(personBowingDeeply,1F647); 164 | EMOJI_METHOD(seeNoEvilMonkey,1F648); 165 | EMOJI_METHOD(hearNoEvilMonkey,1F649); 166 | EMOJI_METHOD(speakNoEvilMonkey,1F64A); 167 | EMOJI_METHOD(happyPersonRaisingOneHand,1F64B); 168 | EMOJI_METHOD(personRaisingBothHandsInCelebration,1F64C); 169 | EMOJI_METHOD(personFrowning,1F64D); 170 | EMOJI_METHOD(personWithPoutingFace,1F64E); 171 | EMOJI_METHOD(personWithFoldedHands,1F64F); 172 | @end 173 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo/BCKeyBoard/BCKeyBoard.m: -------------------------------------------------------------------------------- 1 | // 2 | // BCKeyBoard.m 3 | // BCDemo 4 | // 5 | // Created by baochao on 15/7/27. 6 | // Copyright (c) 2015年 baochao. All rights reserved. 7 | // 8 | 9 | #import "BCKeyBoard.h" 10 | #import "BCTextView.h" 11 | 12 | #import "DXFaceView.h" 13 | #import "BCMoreView.h" 14 | 15 | 16 | #define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width) 17 | #define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height) 18 | 19 | 20 | #define kBCTextViewHeight 36 /**< 底部textView的高度 */ 21 | #define kHorizontalPadding 8 /**< 横向间隔 */ 22 | #define kVerticalPadding 5 /**< 纵向间隔 */ 23 | 24 | @interface BCKeyBoard () 25 | @property (nonatomic,strong)UIImageView *backgroundImageView; 26 | @property (nonatomic,strong)UIButton *faceBtn; 27 | @property (nonatomic,strong)UIButton *moreBtn; 28 | @property (nonatomic,strong)BCTextView *textView; 29 | @property (nonatomic,strong)UIView *faceView; 30 | @property (nonatomic,strong)UIView *moreView; 31 | @property (nonatomic,assign)CGFloat lastHeight; 32 | @property (nonatomic,strong)UIView *activeView; 33 | @end 34 | 35 | @implementation BCKeyBoard 36 | - (instancetype)initWithFrame:(CGRect)frame 37 | { 38 | if (frame.size.height < (kVerticalPadding * 2 + kBCTextViewHeight)) { 39 | frame.size.height = kVerticalPadding * 2 + kBCTextViewHeight; 40 | } 41 | self = [super initWithFrame:frame]; 42 | if (self) { 43 | [self createUI]; 44 | } 45 | return self; 46 | } 47 | 48 | - (void)setFrame:(CGRect)frame 49 | { 50 | if (frame.size.height < (kVerticalPadding * 2 + kBCTextViewHeight)) { 51 | frame.size.height = kVerticalPadding * 2 + kBCTextViewHeight; 52 | } 53 | [super setFrame:frame]; 54 | } 55 | - (void)createUI 56 | { 57 | _lastHeight = 30; 58 | //注册键盘改变是调用 59 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil]; 60 | 61 | self.backgroundImageView = [[UIImageView alloc] initWithFrame:self.bounds]; 62 | self.backgroundImageView.userInteractionEnabled = YES; 63 | self.backgroundImageView.image = [[UIImage imageNamed:@"messageToolbarBg"] stretchableImageWithLeftCapWidth:0.5 topCapHeight:10]; 64 | 65 | 66 | //表情按钮 67 | self.faceBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 68 | self.faceBtn.frame = CGRectMake(kHorizontalPadding,kHorizontalPadding, 30, 30); 69 | [self.faceBtn addTarget:self action:@selector(willShowFaceView:) forControlEvents:UIControlEventTouchUpInside]; 70 | [self.faceBtn setBackgroundImage:[UIImage imageNamed:@"chatBar_face"] forState:UIControlStateNormal]; 71 | [self.faceBtn setBackgroundImage:[UIImage imageNamed:@"chatBar_keyboard"] forState:UIControlStateSelected]; 72 | [self addSubview:self.faceBtn]; 73 | 74 | //文本 75 | self.textView = [[BCTextView alloc] initWithFrame:CGRectMake(CGRectGetMaxX(self.faceBtn.frame)+kHorizontalPadding, kHorizontalPadding, self.bounds.size.width - 4*kHorizontalPadding - 30*2, 30)]; 76 | self.textView.placeholderColor = self.placeholderColor; 77 | self.textView.returnKeyType = UIReturnKeySend; 78 | self.textView.scrollEnabled = NO; 79 | self.textView.backgroundColor = [UIColor clearColor]; 80 | self.textView.layer.borderColor = [UIColor colorWithWhite:0.8f alpha:1.0f].CGColor; 81 | self.textView.layer.borderWidth = 0.65f; 82 | self.textView.layer.cornerRadius = 6.0f; 83 | self.textView.delegate = self; 84 | 85 | //更多按钮 86 | self.moreBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 87 | self.moreBtn.frame = CGRectMake(CGRectGetMaxX(self.textView.frame)+kHorizontalPadding,kHorizontalPadding,30,30); 88 | [self.moreBtn addTarget:self action:@selector(willShowactiveView:) forControlEvents:UIControlEventTouchUpInside]; 89 | [self.moreBtn setBackgroundImage:[UIImage imageNamed:@"chatBar_more"] forState:UIControlStateNormal]; 90 | [self.moreBtn setBackgroundImage:[UIImage imageNamed:@"chatBar_keyboard"] forState:UIControlStateSelected]; 91 | 92 | [self addSubview:self.backgroundImageView]; 93 | [self.backgroundImageView addSubview:self.textView]; 94 | [self.backgroundImageView addSubview:self.faceBtn]; 95 | [self.backgroundImageView addSubview:self.moreBtn]; 96 | 97 | if (!self.faceView) { 98 | self.faceView = [[DXFaceView alloc] initWithFrame:CGRectMake(0, (kHorizontalPadding * 2 + 30), self.frame.size.width, 200)]; 99 | [(DXFaceView *)self.faceView setDelegate:self]; 100 | self.faceView.backgroundColor = [UIColor whiteColor]; 101 | self.faceView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin; 102 | } 103 | 104 | if (!self.moreView) { 105 | self.moreView = [[BCMoreView alloc] initWithFrame:CGRectMake(0, (kHorizontalPadding * 2 + 30), self.frame.size.width, 200)]; 106 | self.moreView.backgroundColor = [UIColor whiteColor]; 107 | [(BCMoreView *)self.moreView setDelegate:self]; 108 | self.moreView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin; 109 | } 110 | } 111 | - (void)changeFrame:(CGFloat)height{ 112 | 113 | if (height == _lastHeight) 114 | { 115 | return; 116 | } 117 | else{ 118 | CGFloat changeHeight = height - _lastHeight; 119 | 120 | CGRect rect = self.frame; 121 | rect.size.height += changeHeight; 122 | rect.origin.y -= changeHeight; 123 | self.frame = rect; 124 | 125 | rect = self.backgroundImageView.frame; 126 | rect.size.height += changeHeight; 127 | self.backgroundImageView.frame = rect; 128 | 129 | 130 | [self.textView setContentOffset:CGPointMake(0.0f, (self.textView.contentSize.height - self.textView.frame.size.height) / 2) animated:YES]; 131 | 132 | CGRect frame = self.textView.frame; 133 | frame.size.height = height; 134 | self.textView.frame = frame; 135 | 136 | _lastHeight = height; 137 | 138 | if (self.delegate && [self.delegate respondsToSelector:@selector(returnHeight:)]) { 139 | [self.delegate returnHeight:height]; 140 | } 141 | } 142 | 143 | } 144 | - (void)setPlaceholder:(NSString *)placeholder 145 | { 146 | self.textView.placeholder = placeholder; 147 | } 148 | - (void)setPlaceholderColor:(UIColor *)placeholderColor 149 | { 150 | self.textView.placeholderColor = placeholderColor; 151 | } 152 | - (void)keyboardWillChangeFrame:(NSNotification *)notification{ 153 | NSDictionary *userInfo = notification.userInfo; 154 | CGRect endFrame = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; 155 | CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; 156 | UIViewAnimationCurve curve = [userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]; 157 | void(^animations)() = ^{ 158 | CGRect frame = self.frame; 159 | frame.origin.y = endFrame.origin.y - self.bounds.size.height; 160 | self.frame = frame; 161 | }; 162 | void(^completion)(BOOL) = ^(BOOL finished){ 163 | }; 164 | [UIView animateWithDuration:duration delay:0.0f options:(curve << 16 | UIViewAnimationOptionBeginFromCurrentState) animations:animations completion:completion]; 165 | } 166 | #pragma mark 表情View 167 | - (void)willShowFaceView:(UIButton *)btn 168 | { 169 | btn.selected = !btn.selected; 170 | if(btn.selected == YES){ 171 | [self willShowBottomView:self.faceView]; 172 | [self.textView resignFirstResponder]; 173 | }else{ 174 | [self willShowBottomView:nil]; 175 | [self.textView becomeFirstResponder]; 176 | } 177 | } 178 | 179 | #pragma mark 表更多View 180 | - (void)willShowactiveView:(UIButton *)btn 181 | { 182 | btn.selected = !btn.selected; 183 | if(btn.selected == YES){ 184 | [self willShowBottomView:self.moreView]; 185 | [self.textView resignFirstResponder]; 186 | [(BCMoreView *)self.moreView setImageArray:self.imageArray]; 187 | }else{ 188 | [self willShowBottomView:nil]; 189 | [self.textView becomeFirstResponder]; 190 | } 191 | } 192 | 193 | - (void)willShowBottomHeight:(CGFloat)bottomHeight 194 | { 195 | CGRect fromFrame = self.frame; 196 | CGFloat toHeight = self.backgroundImageView.frame.size.height + bottomHeight; 197 | CGRect toFrame = CGRectMake(fromFrame.origin.x, fromFrame.origin.y + (fromFrame.size.height - toHeight), fromFrame.size.width, toHeight); 198 | self.frame = toFrame; 199 | 200 | if (self.delegate && [self.delegate respondsToSelector:@selector(returnHeight:)]) { 201 | [self.delegate returnHeight:toHeight]; 202 | } 203 | } 204 | - (CGFloat)getTextViewContentH:(UITextView *)textView 205 | { 206 | return ceilf([textView sizeThatFits:textView.frame.size].height); 207 | } 208 | - (void)textViewDidBeginEditing:(UITextView *)textView 209 | { 210 | [self willShowBottomView:nil]; 211 | self.faceBtn.selected = NO; 212 | self.moreBtn.selected = NO; 213 | } 214 | 215 | - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 216 | { 217 | 218 | if ([text isEqualToString:@"\n"]) { 219 | if ([self.delegate respondsToSelector:@selector(didSendText:)]) { 220 | [self.delegate didSendText:textView.text]; 221 | self.textView.text = @""; 222 | [self changeFrame:ceilf([textView sizeThatFits:textView.frame.size].height)]; 223 | } 224 | return NO; 225 | } 226 | return YES; 227 | } 228 | - (void)willShowBottomView:(UIView *)bottomView 229 | { 230 | if (![self.activeView isEqual:bottomView]) { 231 | CGFloat bottomHeight = bottomView ? bottomView.frame.size.height : 0; 232 | [self willShowBottomHeight:bottomHeight]; 233 | 234 | if (bottomView) { 235 | CGRect rect = bottomView.frame; 236 | rect.origin.y = CGRectGetMaxY(self.backgroundImageView.frame); 237 | bottomView.frame = rect; 238 | [self addSubview:bottomView]; 239 | } 240 | if (self.activeView) { 241 | [self.activeView removeFromSuperview]; 242 | } 243 | self.activeView = bottomView; 244 | } 245 | } 246 | - (void)textViewDidChange:(UITextView *)textView 247 | { 248 | [self changeFrame:ceilf([textView sizeThatFits:textView.frame.size].height)]; 249 | } 250 | - (void)selectedFacialView:(NSString *)str isDelete:(BOOL)isDelete 251 | { 252 | NSString *chatText = self.textView.text; 253 | 254 | if (!isDelete && str.length > 0) { 255 | self.textView.text = [NSString stringWithFormat:@"%@%@",chatText,str]; 256 | } 257 | else { 258 | if (chatText.length >= 2) 259 | { 260 | NSString *subStr = [chatText substringFromIndex:chatText.length-2]; 261 | if ([(DXFaceView *)self.faceView stringIsFace:subStr]) { 262 | self.textView.text = [chatText substringToIndex:chatText.length-2]; 263 | [self textViewDidChange:self.textView]; 264 | return; 265 | } 266 | } 267 | if (chatText.length > 0) { 268 | self.textView.text = [chatText substringToIndex:chatText.length-1]; 269 | } 270 | } 271 | [self textViewDidChange:self.textView]; 272 | } 273 | - (void)sendFace 274 | { 275 | NSString *chatText = self.textView.text; 276 | if (chatText.length > 0) { 277 | if ([self.delegate respondsToSelector:@selector(didSendText:)]) { 278 | [self.delegate didSendText:chatText]; 279 | self.textView.text = @""; 280 | [self changeFrame:ceilf([self.textView sizeThatFits:self.textView.frame.size].height)]; 281 | } 282 | } 283 | } 284 | - (void)didselectImageView:(NSInteger)index 285 | { 286 | switch (index) { 287 | case 0: 288 | [self createActionSheet]; 289 | break; 290 | default: 291 | break; 292 | } 293 | } 294 | - (void)createActionSheet 295 | { 296 | UIActionSheet *action=[[UIActionSheet alloc] initWithTitle:@"选取照片" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"从摄像头选取", @"从图片库选择",nil]; 297 | [action showInView:self]; 298 | } 299 | - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 300 | { 301 | switch (buttonIndex) { 302 | case 0: 303 | [self openCamera]; 304 | break; 305 | case 1: 306 | [self openLibary]; 307 | break; 308 | default: 309 | break; 310 | } 311 | } 312 | - (void)openCamera{ 313 | //打开系统相机 314 | if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){ 315 | UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 316 | picker.delegate = self; 317 | picker.allowsEditing = YES; 318 | picker.sourceType = UIImagePickerControllerSourceTypeCamera; 319 | [self.currentCtr presentViewController:picker animated:YES completion:nil]; 320 | } 321 | } 322 | - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 323 | { 324 | UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 325 | if([self.delegate respondsToSelector:@selector(returnImage:)]){ 326 | [self.delegate returnImage:image]; 327 | } 328 | UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); 329 | [self.currentCtr dismissViewControllerAnimated:YES completion:nil]; 330 | 331 | } 332 | - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 333 | { 334 | [self.currentCtr dismissViewControllerAnimated:YES completion:nil]; 335 | } 336 | - (void)openLibary{ 337 | if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){ 338 | UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 339 | picker.delegate = self; 340 | picker.allowsEditing = YES; 341 | picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 342 | [self.currentCtr presentViewController:picker animated:YES completion:nil]; 343 | } 344 | } 345 | - (void)dealloc 346 | { 347 | [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil]; 348 | } 349 | @end 350 | -------------------------------------------------------------------------------- /BCKeyBoard/BCKeyBoard.m: -------------------------------------------------------------------------------- 1 | // 2 | // BCKeyBoard.m 3 | // BCDemo 4 | // 5 | // Created by baochao on 15/7/27. 6 | // Copyright (c) 2015年 baochao. All rights reserved. 7 | // 8 | 9 | #import "BCKeyBoard.h" 10 | #import "BCTextView.h" 11 | #import "Const.h" 12 | #import "DXFaceView.h" 13 | #import "BCMoreView.h" 14 | 15 | @interface BCKeyBoard () 16 | @property (nonatomic,strong)UIImageView *backgroundImageView; 17 | @property (nonatomic,strong)UIButton *faceBtn; 18 | @property (nonatomic,strong)UIButton *moreBtn; 19 | @property (nonatomic,strong)BCTextView *textView; 20 | @property (nonatomic,strong)UIView *faceView; 21 | @property (nonatomic,assign)BOOL isTop; 22 | @property (nonatomic,strong)UIView *moreView; 23 | @property (nonatomic,assign)CGFloat lastHeight; 24 | //拓展的view 25 | @property (nonatomic,strong)UIView *activeView; 26 | @end 27 | 28 | @implementation BCKeyBoard 29 | - (instancetype)initWithFrame:(CGRect)frame 30 | { 31 | if (frame.size.height < (kVerticalPadding * 2 + kBCTextViewHeight)) { 32 | frame.size.height = kVerticalPadding * 2 + kBCTextViewHeight; 33 | } 34 | self = [super initWithFrame:frame]; 35 | if (self) { 36 | [self createUI]; 37 | } 38 | return self; 39 | } 40 | 41 | - (void)setFrame:(CGRect)frame 42 | { 43 | if (frame.size.height < (kVerticalPadding * 2 + kBCTextViewHeight)) { 44 | frame.size.height = kVerticalPadding * 2 + kBCTextViewHeight; 45 | } 46 | [super setFrame:frame]; 47 | } 48 | - (void)createUI 49 | { 50 | _lastHeight = 30; 51 | //注册键盘改变是调用 52 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil]; 53 | 54 | self.backgroundImageView = [[UIImageView alloc] initWithFrame:self.bounds]; 55 | self.backgroundImageView.userInteractionEnabled = YES; 56 | self.backgroundImageView.image = [[UIImage imageNamed:@"messageToolbarBg"] stretchableImageWithLeftCapWidth:0.5 topCapHeight:10]; 57 | 58 | 59 | //表情按钮 60 | self.faceBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 61 | self.faceBtn.frame = CGRectMake(kHorizontalPadding,kHorizontalPadding, 30, 30); 62 | [self.faceBtn addTarget:self action:@selector(willShowFaceView:) forControlEvents:UIControlEventTouchUpInside]; 63 | [self.faceBtn setBackgroundImage:[UIImage imageNamed:@"chatBar_face"] forState:UIControlStateNormal]; 64 | [self.faceBtn setBackgroundImage:[UIImage imageNamed:@"chatBar_keyboard"] forState:UIControlStateSelected]; 65 | [self addSubview:self.faceBtn]; 66 | 67 | //文本 68 | self.textView = [[BCTextView alloc] initWithFrame:CGRectMake(CGRectGetMaxX(self.faceBtn.frame)+kHorizontalPadding, kHorizontalPadding, self.bounds.size.width - 4*kHorizontalPadding - 30*2, 30)]; 69 | self.textView.placeholderColor = self.placeholderColor; 70 | self.textView.returnKeyType = UIReturnKeySend; 71 | self.textView.scrollEnabled = NO; 72 | self.textView.backgroundColor = [UIColor clearColor]; 73 | self.textView.layer.borderColor = [UIColor colorWithWhite:0.8f alpha:1.0f].CGColor; 74 | self.textView.layer.borderWidth = 0.65f; 75 | self.textView.layer.cornerRadius = 6.0f; 76 | self.textView.delegate = self; 77 | 78 | //更多按钮 79 | self.moreBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 80 | self.moreBtn.frame = CGRectMake(CGRectGetMaxX(self.textView.frame)+kHorizontalPadding,kHorizontalPadding,30,30); 81 | [self.moreBtn addTarget:self action:@selector(willShowactiveView:) forControlEvents:UIControlEventTouchUpInside]; 82 | [self.moreBtn setBackgroundImage:[UIImage imageNamed:@"chatBar_more"] forState:UIControlStateNormal]; 83 | [self.moreBtn setBackgroundImage:[UIImage imageNamed:@"chatBar_keyboard"] forState:UIControlStateSelected]; 84 | 85 | [self addSubview:self.backgroundImageView]; 86 | [self.backgroundImageView addSubview:self.textView]; 87 | [self.backgroundImageView addSubview:self.faceBtn]; 88 | [self.backgroundImageView addSubview:self.moreBtn]; 89 | 90 | if (!self.faceView) { 91 | self.faceView = [[DXFaceView alloc] initWithFrame:CGRectMake(0, (kHorizontalPadding * 2 + 30), self.frame.size.width, 200)]; 92 | [(DXFaceView *)self.faceView setDelegate:self]; 93 | self.faceView.backgroundColor = [UIColor whiteColor]; 94 | self.faceView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin; 95 | } 96 | 97 | if (!self.moreView) { 98 | self.moreView = [[BCMoreView alloc] initWithFrame:CGRectMake(0, (kHorizontalPadding * 2 + 30), self.frame.size.width, 200)]; 99 | self.moreView.backgroundColor = [UIColor whiteColor]; 100 | [(BCMoreView *)self.moreView setDelegate:self]; 101 | self.moreView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin; 102 | } 103 | } 104 | - (void)changeFrame:(CGFloat)height{ 105 | 106 | if (height == _lastHeight) 107 | { 108 | return; 109 | } 110 | else{ 111 | CGFloat changeHeight = height - _lastHeight; 112 | 113 | CGRect rect = self.frame; 114 | rect.size.height += changeHeight; 115 | rect.origin.y -= changeHeight; 116 | self.frame = rect; 117 | 118 | rect = self.backgroundImageView.frame; 119 | rect.size.height += changeHeight; 120 | self.backgroundImageView.frame = rect; 121 | 122 | 123 | [self.textView setContentOffset:CGPointMake(0.0f, (self.textView.contentSize.height - self.textView.frame.size.height) / 2) animated:YES]; 124 | 125 | CGRect frame = self.textView.frame; 126 | frame.size.height = height; 127 | self.textView.frame = frame; 128 | 129 | _lastHeight = height; 130 | 131 | if (self.delegate && [self.delegate respondsToSelector:@selector(returnHeight:)]) { 132 | [self.delegate returnHeight:height]; 133 | } 134 | } 135 | 136 | } 137 | - (void)setPlaceholder:(NSString *)placeholder 138 | { 139 | self.textView.placeholder = placeholder; 140 | } 141 | - (void)setPlaceholderColor:(UIColor *)placeholderColor 142 | { 143 | self.textView.placeholderColor = placeholderColor; 144 | } 145 | - (void)keyboardWillChangeFrame:(NSNotification *)notification{ 146 | NSDictionary *userInfo = notification.userInfo; 147 | CGRect endFrame = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; 148 | CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; 149 | UIViewAnimationCurve curve = [userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]; 150 | void(^animations)() = ^{ 151 | CGRect frame = self.frame; 152 | frame.origin.y = endFrame.origin.y - self.bounds.size.height; 153 | self.frame = frame; 154 | }; 155 | void(^completion)(BOOL) = ^(BOOL finished){ 156 | }; 157 | [UIView animateWithDuration:duration delay:0.0f options:(curve << 16 | UIViewAnimationOptionBeginFromCurrentState) animations:animations completion:completion]; 158 | } 159 | #pragma mark 表情View 160 | - (void)willShowFaceView:(UIButton *)btn 161 | { 162 | btn.selected = !btn.selected; 163 | if(btn.selected == YES){ 164 | [self willShowBottomView:self.faceView]; 165 | [self.textView resignFirstResponder]; 166 | }else{ 167 | [self willShowBottomView:nil]; 168 | [self.textView becomeFirstResponder]; 169 | } 170 | } 171 | 172 | #pragma mark 表更多View 173 | - (void)willShowactiveView:(UIButton *)btn 174 | { 175 | btn.selected = !btn.selected; 176 | if(btn.selected == YES){ 177 | [self willShowBottomView:self.moreView]; 178 | [self.textView resignFirstResponder]; 179 | [(BCMoreView *)self.moreView setImageArray:self.imageArray]; 180 | }else{ 181 | [self willShowBottomView:nil]; 182 | [self.textView becomeFirstResponder]; 183 | } 184 | } 185 | 186 | - (void)willShowBottomHeight:(CGFloat)bottomHeight 187 | { 188 | CGRect fromFrame = self.frame; 189 | CGFloat toHeight = self.backgroundImageView.frame.size.height + bottomHeight; 190 | CGRect toFrame = CGRectMake(fromFrame.origin.x, fromFrame.origin.y + (fromFrame.size.height - toHeight), fromFrame.size.width, toHeight); 191 | self.frame = toFrame; 192 | 193 | if (self.delegate && [self.delegate respondsToSelector:@selector(returnHeight:)]) { 194 | [self.delegate returnHeight:toHeight]; 195 | } 196 | } 197 | - (CGFloat)getTextViewContentH:(UITextView *)textView 198 | { 199 | return ceilf([textView sizeThatFits:textView.frame.size].height); 200 | } 201 | - (void)textViewDidBeginEditing:(UITextView *)textView 202 | { 203 | [self willShowBottomView:nil]; 204 | self.faceBtn.selected = NO; 205 | self.moreBtn.selected = NO; 206 | } 207 | - (void)willShowKeyboardFromFrame:(CGRect)beginFrame toFrame:(CGRect)toFrame 208 | { 209 | if (beginFrame.origin.y == [[UIScreen mainScreen] bounds].size.height) 210 | { 211 | [self willShowBottomHeight:toFrame.size.height]; 212 | if (self.activeView) { 213 | [self.activeView removeFromSuperview]; 214 | } 215 | self.activeView = nil; 216 | } 217 | else if(toFrame.origin.y == [[UIScreen mainScreen] bounds].size.height) 218 | { 219 | [self willShowBottomHeight:0]; 220 | } 221 | else{ 222 | [self willShowBottomHeight:toFrame.size.height]; 223 | } 224 | } 225 | - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 226 | { 227 | if ([text isEqualToString:@"\n"]) { 228 | if ([self.delegate respondsToSelector:@selector(didSendText:)]) { 229 | [self.delegate didSendText:textView.text]; 230 | self.textView.text = @""; 231 | [self changeFrame:ceilf([textView sizeThatFits:textView.frame.size].height)]; 232 | } 233 | return NO; 234 | } 235 | return YES; 236 | } 237 | - (void)willShowBottomView:(UIView *)bottomView 238 | { 239 | if (![self.activeView isEqual:bottomView]) { 240 | CGFloat bottomHeight = bottomView ? bottomView.frame.size.height : 0; 241 | [self willShowBottomHeight:bottomHeight]; 242 | 243 | if (bottomView) { 244 | CGRect rect = bottomView.frame; 245 | rect.origin.y = CGRectGetMaxY(self.backgroundImageView.frame); 246 | bottomView.frame = rect; 247 | [self addSubview:bottomView]; 248 | } 249 | if (self.activeView) { 250 | [self.activeView removeFromSuperview]; 251 | } 252 | self.activeView = bottomView; 253 | } 254 | } 255 | - (void)textViewDidChange:(UITextView *)textView 256 | { 257 | [self changeFrame:ceilf([textView sizeThatFits:textView.frame.size].height)]; 258 | } 259 | - (void)selectedFacialView:(NSString *)str isDelete:(BOOL)isDelete 260 | { 261 | NSString *chatText = self.textView.text; 262 | 263 | if (!isDelete && str.length > 0) { 264 | self.textView.text = [NSString stringWithFormat:@"%@%@",chatText,str]; 265 | } 266 | else { 267 | if (chatText.length >= 2) 268 | { 269 | NSString *subStr = [chatText substringFromIndex:chatText.length-2]; 270 | if ([(DXFaceView *)self.faceView stringIsFace:subStr]) { 271 | self.textView.text = [chatText substringToIndex:chatText.length-2]; 272 | [self textViewDidChange:self.textView]; 273 | return; 274 | } 275 | } 276 | if (chatText.length > 0) { 277 | self.textView.text = [chatText substringToIndex:chatText.length-1]; 278 | } 279 | } 280 | [self textViewDidChange:self.textView]; 281 | } 282 | - (void)sendFace 283 | { 284 | NSString *chatText = self.textView.text; 285 | if (chatText.length > 0) { 286 | if ([self.delegate respondsToSelector:@selector(didSendText:)]) { 287 | [self.delegate didSendText:chatText]; 288 | self.textView.text = @""; 289 | [self changeFrame:ceilf([self.textView sizeThatFits:self.textView.frame.size].height)]; 290 | } 291 | } 292 | } 293 | - (void)didselectImageView:(NSInteger)index 294 | { 295 | switch (index) { 296 | case 0: 297 | [self createActionSheet]; 298 | break; 299 | default: 300 | break; 301 | } 302 | } 303 | - (void)createActionSheet 304 | { 305 | UIActionSheet *action=[[UIActionSheet alloc] initWithTitle:@"选取照片" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"从摄像头选取", @"从图片库选择",nil]; 306 | [action showInView:self]; 307 | } 308 | - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 309 | { 310 | switch (buttonIndex) { 311 | case 0: 312 | [self openCamera]; 313 | break; 314 | case 1: 315 | [self openLibary]; 316 | break; 317 | default: 318 | break; 319 | } 320 | } 321 | - (void)openCamera{ 322 | //打开系统相机 323 | if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){ 324 | UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 325 | picker.delegate = self; 326 | picker.allowsEditing = YES; 327 | picker.sourceType = UIImagePickerControllerSourceTypeCamera; 328 | [self.currentCtr presentViewController:picker animated:YES completion:nil]; 329 | } 330 | } 331 | - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 332 | { 333 | UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 334 | if([self.delegate respondsToSelector:@selector(returnImage:)]){ 335 | [self.delegate returnImage:image]; 336 | } 337 | UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); 338 | [self.currentCtr dismissViewControllerAnimated:YES completion:nil]; 339 | 340 | } 341 | - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 342 | { 343 | [self.currentCtr dismissViewControllerAnimated:YES completion:nil]; 344 | } 345 | - (void)openLibary{ 346 | if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){ 347 | UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 348 | picker.delegate = self; 349 | picker.allowsEditing = YES; 350 | picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 351 | [self.currentCtr presentViewController:picker animated:YES completion:nil]; 352 | } 353 | } 354 | - (void)dealloc 355 | { 356 | [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil]; 357 | } 358 | @end 359 | -------------------------------------------------------------------------------- /BCKeyBoardDemo/BCKeyBoardDemo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | CBE2CEEC1C30E3FA0078DC13 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CEEB1C30E3FA0078DC13 /* main.m */; }; 11 | CBE2CEF51C30E3FA0078DC13 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CEF31C30E3FA0078DC13 /* Main.storyboard */; }; 12 | CBE2CEF71C30E3FA0078DC13 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CEF61C30E3FA0078DC13 /* Assets.xcassets */; }; 13 | CBE2CEFA1C30E3FA0078DC13 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CEF81C30E3FA0078DC13 /* LaunchScreen.storyboard */; }; 14 | CBE2CF051C30E3FA0078DC13 /* BCKeyBoardDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF041C30E3FA0078DC13 /* BCKeyBoardDemoTests.m */; }; 15 | CBE2CF101C30E3FA0078DC13 /* BCKeyBoardDemoUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF0F1C30E3FA0078DC13 /* BCKeyBoardDemoUITests.m */; }; 16 | CBE2CF1F1C30E40C0078DC13 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF1E1C30E40C0078DC13 /* AppDelegate.m */; }; 17 | CBE2CF631C30E4130078DC13 /* BCKeyBoard.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF221C30E4130078DC13 /* BCKeyBoard.m */; }; 18 | CBE2CF641C30E4130078DC13 /* BCMoreView.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF241C30E4130078DC13 /* BCMoreView.m */; }; 19 | CBE2CF651C30E4130078DC13 /* BCTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF261C30E4130078DC13 /* BCTextView.m */; }; 20 | CBE2CF661C30E4130078DC13 /* DXFaceView.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF2A1C30E4130078DC13 /* DXFaceView.m */; }; 21 | CBE2CF671C30E4130078DC13 /* Emoji.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF2C1C30E4130078DC13 /* Emoji.m */; }; 22 | CBE2CF681C30E4130078DC13 /* EmojiEmoticons.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF2E1C30E4130078DC13 /* EmojiEmoticons.m */; }; 23 | CBE2CF691C30E4130078DC13 /* FacialView.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF301C30E4130078DC13 /* FacialView.m */; }; 24 | CBE2CF6A1C30E4130078DC13 /* faceDelete.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF331C30E4130078DC13 /* faceDelete.png */; }; 25 | CBE2CF6B1C30E4130078DC13 /* faceDelete@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF341C30E4130078DC13 /* faceDelete@2x.png */; }; 26 | CBE2CF6C1C30E4130078DC13 /* chatBar_face.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF361C30E4130078DC13 /* chatBar_face.png */; }; 27 | CBE2CF6D1C30E4130078DC13 /* chatBar_face@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF371C30E4130078DC13 /* chatBar_face@2x.png */; }; 28 | CBE2CF6E1C30E4130078DC13 /* chatBar_faceSelected.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF381C30E4130078DC13 /* chatBar_faceSelected.png */; }; 29 | CBE2CF6F1C30E4130078DC13 /* chatBar_faceSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF391C30E4130078DC13 /* chatBar_faceSelected@2x.png */; }; 30 | CBE2CF701C30E4130078DC13 /* chatBar_keyboard.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF3A1C30E4130078DC13 /* chatBar_keyboard.png */; }; 31 | CBE2CF711C30E4130078DC13 /* chatBar_keyboard@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF3B1C30E4130078DC13 /* chatBar_keyboard@2x.png */; }; 32 | CBE2CF721C30E4130078DC13 /* chatBar_keyboardSelected.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF3C1C30E4130078DC13 /* chatBar_keyboardSelected.png */; }; 33 | CBE2CF731C30E4130078DC13 /* chatBar_keyboardSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF3D1C30E4130078DC13 /* chatBar_keyboardSelected@2x.png */; }; 34 | CBE2CF741C30E4130078DC13 /* chatBar_more.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF3E1C30E4130078DC13 /* chatBar_more.png */; }; 35 | CBE2CF751C30E4130078DC13 /* chatBar_more@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF3F1C30E4130078DC13 /* chatBar_more@2x.png */; }; 36 | CBE2CF761C30E4130078DC13 /* chatBar_moreSelected.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF401C30E4130078DC13 /* chatBar_moreSelected.png */; }; 37 | CBE2CF771C30E4130078DC13 /* chatBar_moreSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF411C30E4130078DC13 /* chatBar_moreSelected@2x.png */; }; 38 | CBE2CF781C30E4130078DC13 /* chatBar_record.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF421C30E4130078DC13 /* chatBar_record.png */; }; 39 | CBE2CF791C30E4130078DC13 /* chatBar_record@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF431C30E4130078DC13 /* chatBar_record@2x.png */; }; 40 | CBE2CF7A1C30E4130078DC13 /* chatBar_recordBg.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF441C30E4130078DC13 /* chatBar_recordBg.png */; }; 41 | CBE2CF7B1C30E4130078DC13 /* chatBar_recordBg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF451C30E4130078DC13 /* chatBar_recordBg@2x.png */; }; 42 | CBE2CF7C1C30E4130078DC13 /* chatBar_recordSelected.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF461C30E4130078DC13 /* chatBar_recordSelected.png */; }; 43 | CBE2CF7D1C30E4130078DC13 /* chatBar_recordSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF471C30E4130078DC13 /* chatBar_recordSelected@2x.png */; }; 44 | CBE2CF7E1C30E4130078DC13 /* chatBar_recordSelectedBg.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF481C30E4130078DC13 /* chatBar_recordSelectedBg.png */; }; 45 | CBE2CF7F1C30E4130078DC13 /* chatBar_recordSelectedBg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF491C30E4130078DC13 /* chatBar_recordSelectedBg@2x.png */; }; 46 | CBE2CF801C30E4130078DC13 /* chatBar_colorMore_audioCall@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF4B1C30E4130078DC13 /* chatBar_colorMore_audioCall@2x.png */; }; 47 | CBE2CF811C30E4130078DC13 /* chatBar_colorMore_audioCallSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF4C1C30E4130078DC13 /* chatBar_colorMore_audioCallSelected@2x.png */; }; 48 | CBE2CF821C30E4130078DC13 /* chatBar_colorMore_camera@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF4D1C30E4130078DC13 /* chatBar_colorMore_camera@2x.png */; }; 49 | CBE2CF831C30E4130078DC13 /* chatBar_colorMore_cameraSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF4E1C30E4130078DC13 /* chatBar_colorMore_cameraSelected@2x.png */; }; 50 | CBE2CF841C30E4130078DC13 /* chatBar_colorMore_location@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF4F1C30E4130078DC13 /* chatBar_colorMore_location@2x.png */; }; 51 | CBE2CF851C30E4130078DC13 /* chatBar_colorMore_locationSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF501C30E4130078DC13 /* chatBar_colorMore_locationSelected@2x.png */; }; 52 | CBE2CF861C30E4130078DC13 /* chatBar_colorMore_photo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF511C30E4130078DC13 /* chatBar_colorMore_photo@2x.png */; }; 53 | CBE2CF871C30E4130078DC13 /* chatBar_colorMore_photoSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF521C30E4130078DC13 /* chatBar_colorMore_photoSelected@2x.png */; }; 54 | CBE2CF881C30E4130078DC13 /* chatBar_colorMore_video@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF531C30E4130078DC13 /* chatBar_colorMore_video@2x.png */; }; 55 | CBE2CF891C30E4130078DC13 /* chatBar_colorMore_videoSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF541C30E4130078DC13 /* chatBar_colorMore_videoSelected@2x.png */; }; 56 | CBE2CF8A1C30E4130078DC13 /* chatBar_more_camera.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF561C30E4130078DC13 /* chatBar_more_camera.png */; }; 57 | CBE2CF8B1C30E4130078DC13 /* chatBar_more_camera@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF571C30E4130078DC13 /* chatBar_more_camera@2x.png */; }; 58 | CBE2CF8C1C30E4130078DC13 /* chatBar_more_cameraSelected.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF581C30E4130078DC13 /* chatBar_more_cameraSelected.png */; }; 59 | CBE2CF8D1C30E4130078DC13 /* chatBar_more_cameraSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF591C30E4130078DC13 /* chatBar_more_cameraSelected@2x.png */; }; 60 | CBE2CF8E1C30E4130078DC13 /* chatBar_more_location.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF5A1C30E4130078DC13 /* chatBar_more_location.png */; }; 61 | CBE2CF8F1C30E4130078DC13 /* chatBar_more_location@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF5B1C30E4130078DC13 /* chatBar_more_location@2x.png */; }; 62 | CBE2CF901C30E4130078DC13 /* chatBar_more_locationSelected.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF5C1C30E4130078DC13 /* chatBar_more_locationSelected.png */; }; 63 | CBE2CF911C30E4130078DC13 /* chatBar_more_locationSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF5D1C30E4130078DC13 /* chatBar_more_locationSelected@2x.png */; }; 64 | CBE2CF921C30E4130078DC13 /* chatBar_more_photo.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF5E1C30E4130078DC13 /* chatBar_more_photo.png */; }; 65 | CBE2CF931C30E4130078DC13 /* chatBar_more_photo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF5F1C30E4130078DC13 /* chatBar_more_photo@2x.png */; }; 66 | CBE2CF941C30E4130078DC13 /* chatBar_more_photoSelected.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF601C30E4130078DC13 /* chatBar_more_photoSelected.png */; }; 67 | CBE2CF951C30E4130078DC13 /* chatBar_more_photoSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF611C30E4130078DC13 /* chatBar_more_photoSelected@2x.png */; }; 68 | CBE2CF961C30E4130078DC13 /* messageToolbarBg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CBE2CF621C30E4130078DC13 /* messageToolbarBg@2x.png */; }; 69 | CBE2CF991C30E4200078DC13 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE2CF981C30E4200078DC13 /* ViewController.m */; }; 70 | /* End PBXBuildFile section */ 71 | 72 | /* Begin PBXContainerItemProxy section */ 73 | CBE2CF011C30E3FA0078DC13 /* PBXContainerItemProxy */ = { 74 | isa = PBXContainerItemProxy; 75 | containerPortal = CBE2CEDF1C30E3FA0078DC13 /* Project object */; 76 | proxyType = 1; 77 | remoteGlobalIDString = CBE2CEE61C30E3FA0078DC13; 78 | remoteInfo = BCKeyBoardDemo; 79 | }; 80 | CBE2CF0C1C30E3FA0078DC13 /* PBXContainerItemProxy */ = { 81 | isa = PBXContainerItemProxy; 82 | containerPortal = CBE2CEDF1C30E3FA0078DC13 /* Project object */; 83 | proxyType = 1; 84 | remoteGlobalIDString = CBE2CEE61C30E3FA0078DC13; 85 | remoteInfo = BCKeyBoardDemo; 86 | }; 87 | /* End PBXContainerItemProxy section */ 88 | 89 | /* Begin PBXFileReference section */ 90 | CBE2CEE71C30E3FA0078DC13 /* BCKeyBoardDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BCKeyBoardDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 91 | CBE2CEEB1C30E3FA0078DC13 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 92 | CBE2CEF41C30E3FA0078DC13 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 93 | CBE2CEF61C30E3FA0078DC13 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 94 | CBE2CEF91C30E3FA0078DC13 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 95 | CBE2CEFB1C30E3FA0078DC13 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 96 | CBE2CF001C30E3FA0078DC13 /* BCKeyBoardDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BCKeyBoardDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 97 | CBE2CF041C30E3FA0078DC13 /* BCKeyBoardDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BCKeyBoardDemoTests.m; sourceTree = ""; }; 98 | CBE2CF061C30E3FA0078DC13 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 99 | CBE2CF0B1C30E3FA0078DC13 /* BCKeyBoardDemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BCKeyBoardDemoUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 100 | CBE2CF0F1C30E3FA0078DC13 /* BCKeyBoardDemoUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BCKeyBoardDemoUITests.m; sourceTree = ""; }; 101 | CBE2CF111C30E3FA0078DC13 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 102 | CBE2CF1D1C30E40C0078DC13 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 103 | CBE2CF1E1C30E40C0078DC13 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 104 | CBE2CF211C30E4130078DC13 /* BCKeyBoard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BCKeyBoard.h; sourceTree = ""; }; 105 | CBE2CF221C30E4130078DC13 /* BCKeyBoard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BCKeyBoard.m; sourceTree = ""; }; 106 | CBE2CF231C30E4130078DC13 /* BCMoreView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BCMoreView.h; sourceTree = ""; }; 107 | CBE2CF241C30E4130078DC13 /* BCMoreView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BCMoreView.m; sourceTree = ""; }; 108 | CBE2CF251C30E4130078DC13 /* BCTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BCTextView.h; sourceTree = ""; }; 109 | CBE2CF261C30E4130078DC13 /* BCTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BCTextView.m; sourceTree = ""; }; 110 | CBE2CF271C30E4130078DC13 /* Const.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Const.h; sourceTree = ""; }; 111 | CBE2CF291C30E4130078DC13 /* DXFaceView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DXFaceView.h; sourceTree = ""; }; 112 | CBE2CF2A1C30E4130078DC13 /* DXFaceView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DXFaceView.m; sourceTree = ""; }; 113 | CBE2CF2B1C30E4130078DC13 /* Emoji.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Emoji.h; sourceTree = ""; }; 114 | CBE2CF2C1C30E4130078DC13 /* Emoji.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Emoji.m; sourceTree = ""; }; 115 | CBE2CF2D1C30E4130078DC13 /* EmojiEmoticons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EmojiEmoticons.h; sourceTree = ""; }; 116 | CBE2CF2E1C30E4130078DC13 /* EmojiEmoticons.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EmojiEmoticons.m; sourceTree = ""; }; 117 | CBE2CF2F1C30E4130078DC13 /* FacialView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FacialView.h; sourceTree = ""; }; 118 | CBE2CF301C30E4130078DC13 /* FacialView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FacialView.m; sourceTree = ""; }; 119 | CBE2CF331C30E4130078DC13 /* faceDelete.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = faceDelete.png; sourceTree = ""; }; 120 | CBE2CF341C30E4130078DC13 /* faceDelete@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "faceDelete@2x.png"; sourceTree = ""; }; 121 | CBE2CF361C30E4130078DC13 /* chatBar_face.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_face.png; sourceTree = ""; }; 122 | CBE2CF371C30E4130078DC13 /* chatBar_face@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_face@2x.png"; sourceTree = ""; }; 123 | CBE2CF381C30E4130078DC13 /* chatBar_faceSelected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_faceSelected.png; sourceTree = ""; }; 124 | CBE2CF391C30E4130078DC13 /* chatBar_faceSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_faceSelected@2x.png"; sourceTree = ""; }; 125 | CBE2CF3A1C30E4130078DC13 /* chatBar_keyboard.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_keyboard.png; sourceTree = ""; }; 126 | CBE2CF3B1C30E4130078DC13 /* chatBar_keyboard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_keyboard@2x.png"; sourceTree = ""; }; 127 | CBE2CF3C1C30E4130078DC13 /* chatBar_keyboardSelected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_keyboardSelected.png; sourceTree = ""; }; 128 | CBE2CF3D1C30E4130078DC13 /* chatBar_keyboardSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_keyboardSelected@2x.png"; sourceTree = ""; }; 129 | CBE2CF3E1C30E4130078DC13 /* chatBar_more.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_more.png; sourceTree = ""; }; 130 | CBE2CF3F1C30E4130078DC13 /* chatBar_more@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_more@2x.png"; sourceTree = ""; }; 131 | CBE2CF401C30E4130078DC13 /* chatBar_moreSelected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_moreSelected.png; sourceTree = ""; }; 132 | CBE2CF411C30E4130078DC13 /* chatBar_moreSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_moreSelected@2x.png"; sourceTree = ""; }; 133 | CBE2CF421C30E4130078DC13 /* chatBar_record.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_record.png; sourceTree = ""; }; 134 | CBE2CF431C30E4130078DC13 /* chatBar_record@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_record@2x.png"; sourceTree = ""; }; 135 | CBE2CF441C30E4130078DC13 /* chatBar_recordBg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_recordBg.png; sourceTree = ""; }; 136 | CBE2CF451C30E4130078DC13 /* chatBar_recordBg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_recordBg@2x.png"; sourceTree = ""; }; 137 | CBE2CF461C30E4130078DC13 /* chatBar_recordSelected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_recordSelected.png; sourceTree = ""; }; 138 | CBE2CF471C30E4130078DC13 /* chatBar_recordSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_recordSelected@2x.png"; sourceTree = ""; }; 139 | CBE2CF481C30E4130078DC13 /* chatBar_recordSelectedBg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_recordSelectedBg.png; sourceTree = ""; }; 140 | CBE2CF491C30E4130078DC13 /* chatBar_recordSelectedBg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_recordSelectedBg@2x.png"; sourceTree = ""; }; 141 | CBE2CF4B1C30E4130078DC13 /* chatBar_colorMore_audioCall@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_audioCall@2x.png"; sourceTree = ""; }; 142 | CBE2CF4C1C30E4130078DC13 /* chatBar_colorMore_audioCallSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_audioCallSelected@2x.png"; sourceTree = ""; }; 143 | CBE2CF4D1C30E4130078DC13 /* chatBar_colorMore_camera@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_camera@2x.png"; sourceTree = ""; }; 144 | CBE2CF4E1C30E4130078DC13 /* chatBar_colorMore_cameraSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_cameraSelected@2x.png"; sourceTree = ""; }; 145 | CBE2CF4F1C30E4130078DC13 /* chatBar_colorMore_location@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_location@2x.png"; sourceTree = ""; }; 146 | CBE2CF501C30E4130078DC13 /* chatBar_colorMore_locationSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_locationSelected@2x.png"; sourceTree = ""; }; 147 | CBE2CF511C30E4130078DC13 /* chatBar_colorMore_photo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_photo@2x.png"; sourceTree = ""; }; 148 | CBE2CF521C30E4130078DC13 /* chatBar_colorMore_photoSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_photoSelected@2x.png"; sourceTree = ""; }; 149 | CBE2CF531C30E4130078DC13 /* chatBar_colorMore_video@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_video@2x.png"; sourceTree = ""; }; 150 | CBE2CF541C30E4130078DC13 /* chatBar_colorMore_videoSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_colorMore_videoSelected@2x.png"; sourceTree = ""; }; 151 | CBE2CF561C30E4130078DC13 /* chatBar_more_camera.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_more_camera.png; sourceTree = ""; }; 152 | CBE2CF571C30E4130078DC13 /* chatBar_more_camera@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_more_camera@2x.png"; sourceTree = ""; }; 153 | CBE2CF581C30E4130078DC13 /* chatBar_more_cameraSelected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_more_cameraSelected.png; sourceTree = ""; }; 154 | CBE2CF591C30E4130078DC13 /* chatBar_more_cameraSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_more_cameraSelected@2x.png"; sourceTree = ""; }; 155 | CBE2CF5A1C30E4130078DC13 /* chatBar_more_location.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_more_location.png; sourceTree = ""; }; 156 | CBE2CF5B1C30E4130078DC13 /* chatBar_more_location@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_more_location@2x.png"; sourceTree = ""; }; 157 | CBE2CF5C1C30E4130078DC13 /* chatBar_more_locationSelected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_more_locationSelected.png; sourceTree = ""; }; 158 | CBE2CF5D1C30E4130078DC13 /* chatBar_more_locationSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_more_locationSelected@2x.png"; sourceTree = ""; }; 159 | CBE2CF5E1C30E4130078DC13 /* chatBar_more_photo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_more_photo.png; sourceTree = ""; }; 160 | CBE2CF5F1C30E4130078DC13 /* chatBar_more_photo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_more_photo@2x.png"; sourceTree = ""; }; 161 | CBE2CF601C30E4130078DC13 /* chatBar_more_photoSelected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = chatBar_more_photoSelected.png; sourceTree = ""; }; 162 | CBE2CF611C30E4130078DC13 /* chatBar_more_photoSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chatBar_more_photoSelected@2x.png"; sourceTree = ""; }; 163 | CBE2CF621C30E4130078DC13 /* messageToolbarBg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "messageToolbarBg@2x.png"; sourceTree = ""; }; 164 | CBE2CF971C30E4200078DC13 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 165 | CBE2CF981C30E4200078DC13 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 166 | /* End PBXFileReference section */ 167 | 168 | /* Begin PBXFrameworksBuildPhase section */ 169 | CBE2CEE41C30E3FA0078DC13 /* Frameworks */ = { 170 | isa = PBXFrameworksBuildPhase; 171 | buildActionMask = 2147483647; 172 | files = ( 173 | ); 174 | runOnlyForDeploymentPostprocessing = 0; 175 | }; 176 | CBE2CEFD1C30E3FA0078DC13 /* Frameworks */ = { 177 | isa = PBXFrameworksBuildPhase; 178 | buildActionMask = 2147483647; 179 | files = ( 180 | ); 181 | runOnlyForDeploymentPostprocessing = 0; 182 | }; 183 | CBE2CF081C30E3FA0078DC13 /* Frameworks */ = { 184 | isa = PBXFrameworksBuildPhase; 185 | buildActionMask = 2147483647; 186 | files = ( 187 | ); 188 | runOnlyForDeploymentPostprocessing = 0; 189 | }; 190 | /* End PBXFrameworksBuildPhase section */ 191 | 192 | /* Begin PBXGroup section */ 193 | CBE2CEDE1C30E3FA0078DC13 = { 194 | isa = PBXGroup; 195 | children = ( 196 | CBE2CEE91C30E3FA0078DC13 /* BCKeyBoardDemo */, 197 | CBE2CF031C30E3FA0078DC13 /* BCKeyBoardDemoTests */, 198 | CBE2CF0E1C30E3FA0078DC13 /* BCKeyBoardDemoUITests */, 199 | CBE2CEE81C30E3FA0078DC13 /* Products */, 200 | ); 201 | sourceTree = ""; 202 | }; 203 | CBE2CEE81C30E3FA0078DC13 /* Products */ = { 204 | isa = PBXGroup; 205 | children = ( 206 | CBE2CEE71C30E3FA0078DC13 /* BCKeyBoardDemo.app */, 207 | CBE2CF001C30E3FA0078DC13 /* BCKeyBoardDemoTests.xctest */, 208 | CBE2CF0B1C30E3FA0078DC13 /* BCKeyBoardDemoUITests.xctest */, 209 | ); 210 | name = Products; 211 | sourceTree = ""; 212 | }; 213 | CBE2CEE91C30E3FA0078DC13 /* BCKeyBoardDemo */ = { 214 | isa = PBXGroup; 215 | children = ( 216 | CBE2CF201C30E4130078DC13 /* BCKeyBoard */, 217 | CBE2CF1D1C30E40C0078DC13 /* AppDelegate.h */, 218 | CBE2CF1E1C30E40C0078DC13 /* AppDelegate.m */, 219 | CBE2CF971C30E4200078DC13 /* ViewController.h */, 220 | CBE2CF981C30E4200078DC13 /* ViewController.m */, 221 | CBE2CEF31C30E3FA0078DC13 /* Main.storyboard */, 222 | CBE2CEF61C30E3FA0078DC13 /* Assets.xcassets */, 223 | CBE2CEF81C30E3FA0078DC13 /* LaunchScreen.storyboard */, 224 | CBE2CEFB1C30E3FA0078DC13 /* Info.plist */, 225 | CBE2CEEA1C30E3FA0078DC13 /* Supporting Files */, 226 | ); 227 | path = BCKeyBoardDemo; 228 | sourceTree = ""; 229 | }; 230 | CBE2CEEA1C30E3FA0078DC13 /* Supporting Files */ = { 231 | isa = PBXGroup; 232 | children = ( 233 | CBE2CEEB1C30E3FA0078DC13 /* main.m */, 234 | ); 235 | name = "Supporting Files"; 236 | sourceTree = ""; 237 | }; 238 | CBE2CF031C30E3FA0078DC13 /* BCKeyBoardDemoTests */ = { 239 | isa = PBXGroup; 240 | children = ( 241 | CBE2CF041C30E3FA0078DC13 /* BCKeyBoardDemoTests.m */, 242 | CBE2CF061C30E3FA0078DC13 /* Info.plist */, 243 | ); 244 | path = BCKeyBoardDemoTests; 245 | sourceTree = ""; 246 | }; 247 | CBE2CF0E1C30E3FA0078DC13 /* BCKeyBoardDemoUITests */ = { 248 | isa = PBXGroup; 249 | children = ( 250 | CBE2CF0F1C30E3FA0078DC13 /* BCKeyBoardDemoUITests.m */, 251 | CBE2CF111C30E3FA0078DC13 /* Info.plist */, 252 | ); 253 | path = BCKeyBoardDemoUITests; 254 | sourceTree = ""; 255 | }; 256 | CBE2CF201C30E4130078DC13 /* BCKeyBoard */ = { 257 | isa = PBXGroup; 258 | children = ( 259 | CBE2CF211C30E4130078DC13 /* BCKeyBoard.h */, 260 | CBE2CF221C30E4130078DC13 /* BCKeyBoard.m */, 261 | CBE2CF231C30E4130078DC13 /* BCMoreView.h */, 262 | CBE2CF241C30E4130078DC13 /* BCMoreView.m */, 263 | CBE2CF251C30E4130078DC13 /* BCTextView.h */, 264 | CBE2CF261C30E4130078DC13 /* BCTextView.m */, 265 | CBE2CF271C30E4130078DC13 /* Const.h */, 266 | CBE2CF281C30E4130078DC13 /* FaceVIew */, 267 | CBE2CF311C30E4130078DC13 /* image */, 268 | ); 269 | path = BCKeyBoard; 270 | sourceTree = ""; 271 | }; 272 | CBE2CF281C30E4130078DC13 /* FaceVIew */ = { 273 | isa = PBXGroup; 274 | children = ( 275 | CBE2CF291C30E4130078DC13 /* DXFaceView.h */, 276 | CBE2CF2A1C30E4130078DC13 /* DXFaceView.m */, 277 | CBE2CF2B1C30E4130078DC13 /* Emoji.h */, 278 | CBE2CF2C1C30E4130078DC13 /* Emoji.m */, 279 | CBE2CF2D1C30E4130078DC13 /* EmojiEmoticons.h */, 280 | CBE2CF2E1C30E4130078DC13 /* EmojiEmoticons.m */, 281 | CBE2CF2F1C30E4130078DC13 /* FacialView.h */, 282 | CBE2CF301C30E4130078DC13 /* FacialView.m */, 283 | ); 284 | path = FaceVIew; 285 | sourceTree = ""; 286 | }; 287 | CBE2CF311C30E4130078DC13 /* image */ = { 288 | isa = PBXGroup; 289 | children = ( 290 | CBE2CF321C30E4130078DC13 /* emoji */, 291 | CBE2CF351C30E4130078DC13 /* MessageToolbarImages */, 292 | ); 293 | path = image; 294 | sourceTree = ""; 295 | }; 296 | CBE2CF321C30E4130078DC13 /* emoji */ = { 297 | isa = PBXGroup; 298 | children = ( 299 | CBE2CF331C30E4130078DC13 /* faceDelete.png */, 300 | CBE2CF341C30E4130078DC13 /* faceDelete@2x.png */, 301 | ); 302 | path = emoji; 303 | sourceTree = ""; 304 | }; 305 | CBE2CF351C30E4130078DC13 /* MessageToolbarImages */ = { 306 | isa = PBXGroup; 307 | children = ( 308 | CBE2CF361C30E4130078DC13 /* chatBar_face.png */, 309 | CBE2CF371C30E4130078DC13 /* chatBar_face@2x.png */, 310 | CBE2CF381C30E4130078DC13 /* chatBar_faceSelected.png */, 311 | CBE2CF391C30E4130078DC13 /* chatBar_faceSelected@2x.png */, 312 | CBE2CF3A1C30E4130078DC13 /* chatBar_keyboard.png */, 313 | CBE2CF3B1C30E4130078DC13 /* chatBar_keyboard@2x.png */, 314 | CBE2CF3C1C30E4130078DC13 /* chatBar_keyboardSelected.png */, 315 | CBE2CF3D1C30E4130078DC13 /* chatBar_keyboardSelected@2x.png */, 316 | CBE2CF3E1C30E4130078DC13 /* chatBar_more.png */, 317 | CBE2CF3F1C30E4130078DC13 /* chatBar_more@2x.png */, 318 | CBE2CF401C30E4130078DC13 /* chatBar_moreSelected.png */, 319 | CBE2CF411C30E4130078DC13 /* chatBar_moreSelected@2x.png */, 320 | CBE2CF421C30E4130078DC13 /* chatBar_record.png */, 321 | CBE2CF431C30E4130078DC13 /* chatBar_record@2x.png */, 322 | CBE2CF441C30E4130078DC13 /* chatBar_recordBg.png */, 323 | CBE2CF451C30E4130078DC13 /* chatBar_recordBg@2x.png */, 324 | CBE2CF461C30E4130078DC13 /* chatBar_recordSelected.png */, 325 | CBE2CF471C30E4130078DC13 /* chatBar_recordSelected@2x.png */, 326 | CBE2CF481C30E4130078DC13 /* chatBar_recordSelectedBg.png */, 327 | CBE2CF491C30E4130078DC13 /* chatBar_recordSelectedBg@2x.png */, 328 | CBE2CF4A1C30E4130078DC13 /* Color */, 329 | CBE2CF551C30E4130078DC13 /* Gray */, 330 | CBE2CF621C30E4130078DC13 /* messageToolbarBg@2x.png */, 331 | ); 332 | path = MessageToolbarImages; 333 | sourceTree = ""; 334 | }; 335 | CBE2CF4A1C30E4130078DC13 /* Color */ = { 336 | isa = PBXGroup; 337 | children = ( 338 | CBE2CF4B1C30E4130078DC13 /* chatBar_colorMore_audioCall@2x.png */, 339 | CBE2CF4C1C30E4130078DC13 /* chatBar_colorMore_audioCallSelected@2x.png */, 340 | CBE2CF4D1C30E4130078DC13 /* chatBar_colorMore_camera@2x.png */, 341 | CBE2CF4E1C30E4130078DC13 /* chatBar_colorMore_cameraSelected@2x.png */, 342 | CBE2CF4F1C30E4130078DC13 /* chatBar_colorMore_location@2x.png */, 343 | CBE2CF501C30E4130078DC13 /* chatBar_colorMore_locationSelected@2x.png */, 344 | CBE2CF511C30E4130078DC13 /* chatBar_colorMore_photo@2x.png */, 345 | CBE2CF521C30E4130078DC13 /* chatBar_colorMore_photoSelected@2x.png */, 346 | CBE2CF531C30E4130078DC13 /* chatBar_colorMore_video@2x.png */, 347 | CBE2CF541C30E4130078DC13 /* chatBar_colorMore_videoSelected@2x.png */, 348 | ); 349 | path = Color; 350 | sourceTree = ""; 351 | }; 352 | CBE2CF551C30E4130078DC13 /* Gray */ = { 353 | isa = PBXGroup; 354 | children = ( 355 | CBE2CF561C30E4130078DC13 /* chatBar_more_camera.png */, 356 | CBE2CF571C30E4130078DC13 /* chatBar_more_camera@2x.png */, 357 | CBE2CF581C30E4130078DC13 /* chatBar_more_cameraSelected.png */, 358 | CBE2CF591C30E4130078DC13 /* chatBar_more_cameraSelected@2x.png */, 359 | CBE2CF5A1C30E4130078DC13 /* chatBar_more_location.png */, 360 | CBE2CF5B1C30E4130078DC13 /* chatBar_more_location@2x.png */, 361 | CBE2CF5C1C30E4130078DC13 /* chatBar_more_locationSelected.png */, 362 | CBE2CF5D1C30E4130078DC13 /* chatBar_more_locationSelected@2x.png */, 363 | CBE2CF5E1C30E4130078DC13 /* chatBar_more_photo.png */, 364 | CBE2CF5F1C30E4130078DC13 /* chatBar_more_photo@2x.png */, 365 | CBE2CF601C30E4130078DC13 /* chatBar_more_photoSelected.png */, 366 | CBE2CF611C30E4130078DC13 /* chatBar_more_photoSelected@2x.png */, 367 | ); 368 | path = Gray; 369 | sourceTree = ""; 370 | }; 371 | /* End PBXGroup section */ 372 | 373 | /* Begin PBXNativeTarget section */ 374 | CBE2CEE61C30E3FA0078DC13 /* BCKeyBoardDemo */ = { 375 | isa = PBXNativeTarget; 376 | buildConfigurationList = CBE2CF141C30E3FA0078DC13 /* Build configuration list for PBXNativeTarget "BCKeyBoardDemo" */; 377 | buildPhases = ( 378 | CBE2CEE31C30E3FA0078DC13 /* Sources */, 379 | CBE2CEE41C30E3FA0078DC13 /* Frameworks */, 380 | CBE2CEE51C30E3FA0078DC13 /* Resources */, 381 | ); 382 | buildRules = ( 383 | ); 384 | dependencies = ( 385 | ); 386 | name = BCKeyBoardDemo; 387 | productName = BCKeyBoardDemo; 388 | productReference = CBE2CEE71C30E3FA0078DC13 /* BCKeyBoardDemo.app */; 389 | productType = "com.apple.product-type.application"; 390 | }; 391 | CBE2CEFF1C30E3FA0078DC13 /* BCKeyBoardDemoTests */ = { 392 | isa = PBXNativeTarget; 393 | buildConfigurationList = CBE2CF171C30E3FA0078DC13 /* Build configuration list for PBXNativeTarget "BCKeyBoardDemoTests" */; 394 | buildPhases = ( 395 | CBE2CEFC1C30E3FA0078DC13 /* Sources */, 396 | CBE2CEFD1C30E3FA0078DC13 /* Frameworks */, 397 | CBE2CEFE1C30E3FA0078DC13 /* Resources */, 398 | ); 399 | buildRules = ( 400 | ); 401 | dependencies = ( 402 | CBE2CF021C30E3FA0078DC13 /* PBXTargetDependency */, 403 | ); 404 | name = BCKeyBoardDemoTests; 405 | productName = BCKeyBoardDemoTests; 406 | productReference = CBE2CF001C30E3FA0078DC13 /* BCKeyBoardDemoTests.xctest */; 407 | productType = "com.apple.product-type.bundle.unit-test"; 408 | }; 409 | CBE2CF0A1C30E3FA0078DC13 /* BCKeyBoardDemoUITests */ = { 410 | isa = PBXNativeTarget; 411 | buildConfigurationList = CBE2CF1A1C30E3FA0078DC13 /* Build configuration list for PBXNativeTarget "BCKeyBoardDemoUITests" */; 412 | buildPhases = ( 413 | CBE2CF071C30E3FA0078DC13 /* Sources */, 414 | CBE2CF081C30E3FA0078DC13 /* Frameworks */, 415 | CBE2CF091C30E3FA0078DC13 /* Resources */, 416 | ); 417 | buildRules = ( 418 | ); 419 | dependencies = ( 420 | CBE2CF0D1C30E3FA0078DC13 /* PBXTargetDependency */, 421 | ); 422 | name = BCKeyBoardDemoUITests; 423 | productName = BCKeyBoardDemoUITests; 424 | productReference = CBE2CF0B1C30E3FA0078DC13 /* BCKeyBoardDemoUITests.xctest */; 425 | productType = "com.apple.product-type.bundle.ui-testing"; 426 | }; 427 | /* End PBXNativeTarget section */ 428 | 429 | /* Begin PBXProject section */ 430 | CBE2CEDF1C30E3FA0078DC13 /* Project object */ = { 431 | isa = PBXProject; 432 | attributes = { 433 | LastUpgradeCheck = 0720; 434 | ORGANIZATIONNAME = io.hzlzh.yunshouyi; 435 | TargetAttributes = { 436 | CBE2CEE61C30E3FA0078DC13 = { 437 | CreatedOnToolsVersion = 7.2; 438 | }; 439 | CBE2CEFF1C30E3FA0078DC13 = { 440 | CreatedOnToolsVersion = 7.2; 441 | TestTargetID = CBE2CEE61C30E3FA0078DC13; 442 | }; 443 | CBE2CF0A1C30E3FA0078DC13 = { 444 | CreatedOnToolsVersion = 7.2; 445 | TestTargetID = CBE2CEE61C30E3FA0078DC13; 446 | }; 447 | }; 448 | }; 449 | buildConfigurationList = CBE2CEE21C30E3FA0078DC13 /* Build configuration list for PBXProject "BCKeyBoardDemo" */; 450 | compatibilityVersion = "Xcode 3.2"; 451 | developmentRegion = English; 452 | hasScannedForEncodings = 0; 453 | knownRegions = ( 454 | en, 455 | Base, 456 | ); 457 | mainGroup = CBE2CEDE1C30E3FA0078DC13; 458 | productRefGroup = CBE2CEE81C30E3FA0078DC13 /* Products */; 459 | projectDirPath = ""; 460 | projectRoot = ""; 461 | targets = ( 462 | CBE2CEE61C30E3FA0078DC13 /* BCKeyBoardDemo */, 463 | CBE2CEFF1C30E3FA0078DC13 /* BCKeyBoardDemoTests */, 464 | CBE2CF0A1C30E3FA0078DC13 /* BCKeyBoardDemoUITests */, 465 | ); 466 | }; 467 | /* End PBXProject section */ 468 | 469 | /* Begin PBXResourcesBuildPhase section */ 470 | CBE2CEE51C30E3FA0078DC13 /* Resources */ = { 471 | isa = PBXResourcesBuildPhase; 472 | buildActionMask = 2147483647; 473 | files = ( 474 | CBE2CF741C30E4130078DC13 /* chatBar_more.png in Resources */, 475 | CBE2CF951C30E4130078DC13 /* chatBar_more_photoSelected@2x.png in Resources */, 476 | CBE2CF701C30E4130078DC13 /* chatBar_keyboard.png in Resources */, 477 | CBE2CF6C1C30E4130078DC13 /* chatBar_face.png in Resources */, 478 | CBE2CF8D1C30E4130078DC13 /* chatBar_more_cameraSelected@2x.png in Resources */, 479 | CBE2CEFA1C30E3FA0078DC13 /* LaunchScreen.storyboard in Resources */, 480 | CBE2CF921C30E4130078DC13 /* chatBar_more_photo.png in Resources */, 481 | CBE2CF931C30E4130078DC13 /* chatBar_more_photo@2x.png in Resources */, 482 | CBE2CF711C30E4130078DC13 /* chatBar_keyboard@2x.png in Resources */, 483 | CBE2CF901C30E4130078DC13 /* chatBar_more_locationSelected.png in Resources */, 484 | CBE2CF731C30E4130078DC13 /* chatBar_keyboardSelected@2x.png in Resources */, 485 | CBE2CF791C30E4130078DC13 /* chatBar_record@2x.png in Resources */, 486 | CBE2CF7B1C30E4130078DC13 /* chatBar_recordBg@2x.png in Resources */, 487 | CBE2CF851C30E4130078DC13 /* chatBar_colorMore_locationSelected@2x.png in Resources */, 488 | CBE2CEF71C30E3FA0078DC13 /* Assets.xcassets in Resources */, 489 | CBE2CF861C30E4130078DC13 /* chatBar_colorMore_photo@2x.png in Resources */, 490 | CBE2CF8B1C30E4130078DC13 /* chatBar_more_camera@2x.png in Resources */, 491 | CBE2CEF51C30E3FA0078DC13 /* Main.storyboard in Resources */, 492 | CBE2CF751C30E4130078DC13 /* chatBar_more@2x.png in Resources */, 493 | CBE2CF911C30E4130078DC13 /* chatBar_more_locationSelected@2x.png in Resources */, 494 | CBE2CF811C30E4130078DC13 /* chatBar_colorMore_audioCallSelected@2x.png in Resources */, 495 | CBE2CF961C30E4130078DC13 /* messageToolbarBg@2x.png in Resources */, 496 | CBE2CF6D1C30E4130078DC13 /* chatBar_face@2x.png in Resources */, 497 | CBE2CF7E1C30E4130078DC13 /* chatBar_recordSelectedBg.png in Resources */, 498 | CBE2CF841C30E4130078DC13 /* chatBar_colorMore_location@2x.png in Resources */, 499 | CBE2CF8E1C30E4130078DC13 /* chatBar_more_location.png in Resources */, 500 | CBE2CF891C30E4130078DC13 /* chatBar_colorMore_videoSelected@2x.png in Resources */, 501 | CBE2CF821C30E4130078DC13 /* chatBar_colorMore_camera@2x.png in Resources */, 502 | CBE2CF7A1C30E4130078DC13 /* chatBar_recordBg.png in Resources */, 503 | CBE2CF7F1C30E4130078DC13 /* chatBar_recordSelectedBg@2x.png in Resources */, 504 | CBE2CF6B1C30E4130078DC13 /* faceDelete@2x.png in Resources */, 505 | CBE2CF7D1C30E4130078DC13 /* chatBar_recordSelected@2x.png in Resources */, 506 | CBE2CF761C30E4130078DC13 /* chatBar_moreSelected.png in Resources */, 507 | CBE2CF8F1C30E4130078DC13 /* chatBar_more_location@2x.png in Resources */, 508 | CBE2CF941C30E4130078DC13 /* chatBar_more_photoSelected.png in Resources */, 509 | CBE2CF881C30E4130078DC13 /* chatBar_colorMore_video@2x.png in Resources */, 510 | CBE2CF6A1C30E4130078DC13 /* faceDelete.png in Resources */, 511 | CBE2CF721C30E4130078DC13 /* chatBar_keyboardSelected.png in Resources */, 512 | CBE2CF781C30E4130078DC13 /* chatBar_record.png in Resources */, 513 | CBE2CF871C30E4130078DC13 /* chatBar_colorMore_photoSelected@2x.png in Resources */, 514 | CBE2CF8C1C30E4130078DC13 /* chatBar_more_cameraSelected.png in Resources */, 515 | CBE2CF8A1C30E4130078DC13 /* chatBar_more_camera.png in Resources */, 516 | CBE2CF6E1C30E4130078DC13 /* chatBar_faceSelected.png in Resources */, 517 | CBE2CF6F1C30E4130078DC13 /* chatBar_faceSelected@2x.png in Resources */, 518 | CBE2CF771C30E4130078DC13 /* chatBar_moreSelected@2x.png in Resources */, 519 | CBE2CF801C30E4130078DC13 /* chatBar_colorMore_audioCall@2x.png in Resources */, 520 | CBE2CF831C30E4130078DC13 /* chatBar_colorMore_cameraSelected@2x.png in Resources */, 521 | CBE2CF7C1C30E4130078DC13 /* chatBar_recordSelected.png in Resources */, 522 | ); 523 | runOnlyForDeploymentPostprocessing = 0; 524 | }; 525 | CBE2CEFE1C30E3FA0078DC13 /* Resources */ = { 526 | isa = PBXResourcesBuildPhase; 527 | buildActionMask = 2147483647; 528 | files = ( 529 | ); 530 | runOnlyForDeploymentPostprocessing = 0; 531 | }; 532 | CBE2CF091C30E3FA0078DC13 /* Resources */ = { 533 | isa = PBXResourcesBuildPhase; 534 | buildActionMask = 2147483647; 535 | files = ( 536 | ); 537 | runOnlyForDeploymentPostprocessing = 0; 538 | }; 539 | /* End PBXResourcesBuildPhase section */ 540 | 541 | /* Begin PBXSourcesBuildPhase section */ 542 | CBE2CEE31C30E3FA0078DC13 /* Sources */ = { 543 | isa = PBXSourcesBuildPhase; 544 | buildActionMask = 2147483647; 545 | files = ( 546 | CBE2CF681C30E4130078DC13 /* EmojiEmoticons.m in Sources */, 547 | CBE2CF641C30E4130078DC13 /* BCMoreView.m in Sources */, 548 | CBE2CF661C30E4130078DC13 /* DXFaceView.m in Sources */, 549 | CBE2CF691C30E4130078DC13 /* FacialView.m in Sources */, 550 | CBE2CF991C30E4200078DC13 /* ViewController.m in Sources */, 551 | CBE2CF631C30E4130078DC13 /* BCKeyBoard.m in Sources */, 552 | CBE2CEEC1C30E3FA0078DC13 /* main.m in Sources */, 553 | CBE2CF651C30E4130078DC13 /* BCTextView.m in Sources */, 554 | CBE2CF671C30E4130078DC13 /* Emoji.m in Sources */, 555 | CBE2CF1F1C30E40C0078DC13 /* AppDelegate.m in Sources */, 556 | ); 557 | runOnlyForDeploymentPostprocessing = 0; 558 | }; 559 | CBE2CEFC1C30E3FA0078DC13 /* Sources */ = { 560 | isa = PBXSourcesBuildPhase; 561 | buildActionMask = 2147483647; 562 | files = ( 563 | CBE2CF051C30E3FA0078DC13 /* BCKeyBoardDemoTests.m in Sources */, 564 | ); 565 | runOnlyForDeploymentPostprocessing = 0; 566 | }; 567 | CBE2CF071C30E3FA0078DC13 /* Sources */ = { 568 | isa = PBXSourcesBuildPhase; 569 | buildActionMask = 2147483647; 570 | files = ( 571 | CBE2CF101C30E3FA0078DC13 /* BCKeyBoardDemoUITests.m in Sources */, 572 | ); 573 | runOnlyForDeploymentPostprocessing = 0; 574 | }; 575 | /* End PBXSourcesBuildPhase section */ 576 | 577 | /* Begin PBXTargetDependency section */ 578 | CBE2CF021C30E3FA0078DC13 /* PBXTargetDependency */ = { 579 | isa = PBXTargetDependency; 580 | target = CBE2CEE61C30E3FA0078DC13 /* BCKeyBoardDemo */; 581 | targetProxy = CBE2CF011C30E3FA0078DC13 /* PBXContainerItemProxy */; 582 | }; 583 | CBE2CF0D1C30E3FA0078DC13 /* PBXTargetDependency */ = { 584 | isa = PBXTargetDependency; 585 | target = CBE2CEE61C30E3FA0078DC13 /* BCKeyBoardDemo */; 586 | targetProxy = CBE2CF0C1C30E3FA0078DC13 /* PBXContainerItemProxy */; 587 | }; 588 | /* End PBXTargetDependency section */ 589 | 590 | /* Begin PBXVariantGroup section */ 591 | CBE2CEF31C30E3FA0078DC13 /* Main.storyboard */ = { 592 | isa = PBXVariantGroup; 593 | children = ( 594 | CBE2CEF41C30E3FA0078DC13 /* Base */, 595 | ); 596 | name = Main.storyboard; 597 | sourceTree = ""; 598 | }; 599 | CBE2CEF81C30E3FA0078DC13 /* LaunchScreen.storyboard */ = { 600 | isa = PBXVariantGroup; 601 | children = ( 602 | CBE2CEF91C30E3FA0078DC13 /* Base */, 603 | ); 604 | name = LaunchScreen.storyboard; 605 | sourceTree = ""; 606 | }; 607 | /* End PBXVariantGroup section */ 608 | 609 | /* Begin XCBuildConfiguration section */ 610 | CBE2CF121C30E3FA0078DC13 /* Debug */ = { 611 | isa = XCBuildConfiguration; 612 | buildSettings = { 613 | ALWAYS_SEARCH_USER_PATHS = NO; 614 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 615 | CLANG_CXX_LIBRARY = "libc++"; 616 | CLANG_ENABLE_MODULES = YES; 617 | CLANG_ENABLE_OBJC_ARC = YES; 618 | CLANG_WARN_BOOL_CONVERSION = YES; 619 | CLANG_WARN_CONSTANT_CONVERSION = YES; 620 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 621 | CLANG_WARN_EMPTY_BODY = YES; 622 | CLANG_WARN_ENUM_CONVERSION = YES; 623 | CLANG_WARN_INT_CONVERSION = YES; 624 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 625 | CLANG_WARN_UNREACHABLE_CODE = YES; 626 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 627 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 628 | COPY_PHASE_STRIP = NO; 629 | DEBUG_INFORMATION_FORMAT = dwarf; 630 | ENABLE_STRICT_OBJC_MSGSEND = YES; 631 | ENABLE_TESTABILITY = YES; 632 | GCC_C_LANGUAGE_STANDARD = gnu99; 633 | GCC_DYNAMIC_NO_PIC = NO; 634 | GCC_NO_COMMON_BLOCKS = YES; 635 | GCC_OPTIMIZATION_LEVEL = 0; 636 | GCC_PREPROCESSOR_DEFINITIONS = ( 637 | "DEBUG=1", 638 | "$(inherited)", 639 | ); 640 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 641 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 642 | GCC_WARN_UNDECLARED_SELECTOR = YES; 643 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 644 | GCC_WARN_UNUSED_FUNCTION = YES; 645 | GCC_WARN_UNUSED_VARIABLE = YES; 646 | IPHONEOS_DEPLOYMENT_TARGET = 9.2; 647 | MTL_ENABLE_DEBUG_INFO = YES; 648 | ONLY_ACTIVE_ARCH = YES; 649 | SDKROOT = iphoneos; 650 | TARGETED_DEVICE_FAMILY = "1,2"; 651 | }; 652 | name = Debug; 653 | }; 654 | CBE2CF131C30E3FA0078DC13 /* Release */ = { 655 | isa = XCBuildConfiguration; 656 | buildSettings = { 657 | ALWAYS_SEARCH_USER_PATHS = NO; 658 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 659 | CLANG_CXX_LIBRARY = "libc++"; 660 | CLANG_ENABLE_MODULES = YES; 661 | CLANG_ENABLE_OBJC_ARC = YES; 662 | CLANG_WARN_BOOL_CONVERSION = YES; 663 | CLANG_WARN_CONSTANT_CONVERSION = YES; 664 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 665 | CLANG_WARN_EMPTY_BODY = YES; 666 | CLANG_WARN_ENUM_CONVERSION = YES; 667 | CLANG_WARN_INT_CONVERSION = YES; 668 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 669 | CLANG_WARN_UNREACHABLE_CODE = YES; 670 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 671 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 672 | COPY_PHASE_STRIP = NO; 673 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 674 | ENABLE_NS_ASSERTIONS = NO; 675 | ENABLE_STRICT_OBJC_MSGSEND = YES; 676 | GCC_C_LANGUAGE_STANDARD = gnu99; 677 | GCC_NO_COMMON_BLOCKS = YES; 678 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 679 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 680 | GCC_WARN_UNDECLARED_SELECTOR = YES; 681 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 682 | GCC_WARN_UNUSED_FUNCTION = YES; 683 | GCC_WARN_UNUSED_VARIABLE = YES; 684 | IPHONEOS_DEPLOYMENT_TARGET = 9.2; 685 | MTL_ENABLE_DEBUG_INFO = NO; 686 | SDKROOT = iphoneos; 687 | TARGETED_DEVICE_FAMILY = "1,2"; 688 | VALIDATE_PRODUCT = YES; 689 | }; 690 | name = Release; 691 | }; 692 | CBE2CF151C30E3FA0078DC13 /* Debug */ = { 693 | isa = XCBuildConfiguration; 694 | buildSettings = { 695 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 696 | INFOPLIST_FILE = BCKeyBoardDemo/Info.plist; 697 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 698 | PRODUCT_BUNDLE_IDENTIFIER = yunshouyi.BCKeyBoardDemo; 699 | PRODUCT_NAME = "$(TARGET_NAME)"; 700 | }; 701 | name = Debug; 702 | }; 703 | CBE2CF161C30E3FA0078DC13 /* Release */ = { 704 | isa = XCBuildConfiguration; 705 | buildSettings = { 706 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 707 | INFOPLIST_FILE = BCKeyBoardDemo/Info.plist; 708 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 709 | PRODUCT_BUNDLE_IDENTIFIER = yunshouyi.BCKeyBoardDemo; 710 | PRODUCT_NAME = "$(TARGET_NAME)"; 711 | }; 712 | name = Release; 713 | }; 714 | CBE2CF181C30E3FA0078DC13 /* Debug */ = { 715 | isa = XCBuildConfiguration; 716 | buildSettings = { 717 | BUNDLE_LOADER = "$(TEST_HOST)"; 718 | INFOPLIST_FILE = BCKeyBoardDemoTests/Info.plist; 719 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 720 | PRODUCT_BUNDLE_IDENTIFIER = yunshouyi.BCKeyBoardDemoTests; 721 | PRODUCT_NAME = "$(TARGET_NAME)"; 722 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BCKeyBoardDemo.app/BCKeyBoardDemo"; 723 | }; 724 | name = Debug; 725 | }; 726 | CBE2CF191C30E3FA0078DC13 /* Release */ = { 727 | isa = XCBuildConfiguration; 728 | buildSettings = { 729 | BUNDLE_LOADER = "$(TEST_HOST)"; 730 | INFOPLIST_FILE = BCKeyBoardDemoTests/Info.plist; 731 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 732 | PRODUCT_BUNDLE_IDENTIFIER = yunshouyi.BCKeyBoardDemoTests; 733 | PRODUCT_NAME = "$(TARGET_NAME)"; 734 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BCKeyBoardDemo.app/BCKeyBoardDemo"; 735 | }; 736 | name = Release; 737 | }; 738 | CBE2CF1B1C30E3FA0078DC13 /* Debug */ = { 739 | isa = XCBuildConfiguration; 740 | buildSettings = { 741 | INFOPLIST_FILE = BCKeyBoardDemoUITests/Info.plist; 742 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 743 | PRODUCT_BUNDLE_IDENTIFIER = yunshouyi.BCKeyBoardDemoUITests; 744 | PRODUCT_NAME = "$(TARGET_NAME)"; 745 | TEST_TARGET_NAME = BCKeyBoardDemo; 746 | USES_XCTRUNNER = YES; 747 | }; 748 | name = Debug; 749 | }; 750 | CBE2CF1C1C30E3FA0078DC13 /* Release */ = { 751 | isa = XCBuildConfiguration; 752 | buildSettings = { 753 | INFOPLIST_FILE = BCKeyBoardDemoUITests/Info.plist; 754 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 755 | PRODUCT_BUNDLE_IDENTIFIER = yunshouyi.BCKeyBoardDemoUITests; 756 | PRODUCT_NAME = "$(TARGET_NAME)"; 757 | TEST_TARGET_NAME = BCKeyBoardDemo; 758 | USES_XCTRUNNER = YES; 759 | }; 760 | name = Release; 761 | }; 762 | /* End XCBuildConfiguration section */ 763 | 764 | /* Begin XCConfigurationList section */ 765 | CBE2CEE21C30E3FA0078DC13 /* Build configuration list for PBXProject "BCKeyBoardDemo" */ = { 766 | isa = XCConfigurationList; 767 | buildConfigurations = ( 768 | CBE2CF121C30E3FA0078DC13 /* Debug */, 769 | CBE2CF131C30E3FA0078DC13 /* Release */, 770 | ); 771 | defaultConfigurationIsVisible = 0; 772 | defaultConfigurationName = Release; 773 | }; 774 | CBE2CF141C30E3FA0078DC13 /* Build configuration list for PBXNativeTarget "BCKeyBoardDemo" */ = { 775 | isa = XCConfigurationList; 776 | buildConfigurations = ( 777 | CBE2CF151C30E3FA0078DC13 /* Debug */, 778 | CBE2CF161C30E3FA0078DC13 /* Release */, 779 | ); 780 | defaultConfigurationIsVisible = 0; 781 | }; 782 | CBE2CF171C30E3FA0078DC13 /* Build configuration list for PBXNativeTarget "BCKeyBoardDemoTests" */ = { 783 | isa = XCConfigurationList; 784 | buildConfigurations = ( 785 | CBE2CF181C30E3FA0078DC13 /* Debug */, 786 | CBE2CF191C30E3FA0078DC13 /* Release */, 787 | ); 788 | defaultConfigurationIsVisible = 0; 789 | }; 790 | CBE2CF1A1C30E3FA0078DC13 /* Build configuration list for PBXNativeTarget "BCKeyBoardDemoUITests" */ = { 791 | isa = XCConfigurationList; 792 | buildConfigurations = ( 793 | CBE2CF1B1C30E3FA0078DC13 /* Debug */, 794 | CBE2CF1C1C30E3FA0078DC13 /* Release */, 795 | ); 796 | defaultConfigurationIsVisible = 0; 797 | }; 798 | /* End XCConfigurationList section */ 799 | }; 800 | rootObject = CBE2CEDF1C30E3FA0078DC13 /* Project object */; 801 | } 802 | --------------------------------------------------------------------------------