IOS_22 custom keyboard toolbar and ios_22 custom Toolbar
Finally:
Main. storyboard
KeyboardTool. xib
KeyboardTool. h
// KeyboardTool. h // keyboard processing // Created by beyond on 14-8-24. // Copyright (c) 2014 com. beyond. all rights reserved. # import <UIKit/UIKit. h> @ protocol KeyboardToolDelegate; typedef enum {kKeyboardToolButtonTypeNext, // The Next button, // The previous button kKeyboardToolButtonTypeDone // The completion button} KeyboardToolButtonType; @ interface KeyboardTool: UIToolbar // The previous button control @ property (nonatomic, weak) IBOutlet UIBarButtonItem * previusbtn; // The Next button control @ property (nonatomic, weak) IBOutlet UIBarButtonItem * nextBtn; // complete the button control @ property (nonatomic, weak) IBOutlet UIBarButtonItem * doneBtn; // The proxy generally uses weak and avoids conflict with the default inherited delegate @ property (nonatomic, weak) id <KeyboardToolDelegate> toolDelegate; // class method returns an Instance Object + (id) keyboardTool; // listens to the Click Event of the three buttons on the toolbar-(IBAction) previusbtnclicked; -(IBAction) nextBtnClicked;-(IBAction) doneBtnClicked; @ end
KeyboardTool. m
// KeyboardTool. m // keyboard processing // Created by beyond on 14-8-24. // Copyright (c) 2014 com. beyond. all rights reserved. # import "KeyboardTool. h "# import" KeyboardToolDelegate. h "@ implementation KeyboardTool // class method, initialize a KeyboardTool + (id) from the xib File) keyboardTool {// The owner can upload the KeyboardTool class. // when you click the "next" button, call the next method of the owner NSArray * array = [[NSBundle mainBundle] loadNibNamed: @ "keyboardTool" owner: nil options: nil]; // return the initialized KeyboardTool object return array [0];} # pragma mark-Click Event // click the previous button-(void) previusbtnclicked {if ([_ toolDelegate respondsToSelector: @ selector (keyboardTool: buttonType :)]) {// tell the proxy that the previous button [_ toolDelegate keyboardTool: self buttonType: kKeyboardToolButtonTypePrevious] is clicked;} // click the next button-(void) nextBtnClicked {if ([_ toolDelegate respondsToSelector: @ selector (keyboardTool: buttonType :)]) {// tell the proxy that the next button [_ toolDelegate keyboardTool: self buttonType: kKeyboardToolButtonTypeNext] ;}// click the finish button-(void) doneBtnClicked {if ([_ toolDelegate respondsToSelector: @ selector (keyboardTool: buttonType :)]) {// tell the proxy, click the finish button [_ toolDelegate keyboardTool: self buttonType: kKeyboardToolButtonTypeDone]; }}@ end
KeyboardToolDelegate. h
/// KeyboardToolDelegate. h // 22_keyboard case /// Created by beyond on 14-8-24. // Copyright (c) 2014 com. beyond. all rights reserved. // # import <Foundation/Foundation. h> @ class KeyboardTool; @ protocol KeyboardToolDelegate <NSObject>-(void) keyboardTool :( KeyboardTool *) tool buttonType :( KeyboardToolButtonType) type; @ end
BeyondViewController. h
//// BeyondViewController. h // 22_keyboard case /// Created by beyond on 14-8-24. // Copyright (c) 2014 com. beyond. all rights reserved. // # import <UIKit/UIKit. h> # import "KeyboardTool. h "# import" KeyboardToolDelegate. h "@ interface BeyondViewController: UIViewController <response, UIPickerViewDataSource, UIPickerViewDelegate, KeyboardToolDelegate> // birthday input box @ property (weak, nonatomic) IBOutlet UITextField * birthdayTextField; // city input box @ property (weak, nonatomic) IBOutlet UITextField * cityTextField; @ end
BeyondViewController. m
//// BeyondViewController. m // 22_keyboard case /// Created by beyond on 14-8-24. // Copyright (c) 2014 com. beyond. all rights reserved. // # import "BeyondViewController. h "@ interface BeyondViewController () // All provincial arrays @ property (nonatomic, strong) NSArray * provinceNameArr; // dictionary: an array composed of province name key --- value city names @ property (nonatomic, strong) NSDictionary * provinceName_cities_Dict; // input box of the active State currently activated @ property (nonatomic, weak) UITextField * currentTextField; // toolbar @ property (nonatomic, weak) KeyboardTool * tool on the keyboard; // an array composed of all input box controls @ property (nonatomic, strong) NSMutableArray * allTextFields; @ end @ implementation BeyondViewController-(void) viewDidLoad {[super viewDidLoad]; self. allTextFields = [NSMutableArray array]; // class method, instantiate a KeyboardTool object self. tool = [KeyboardTool keyboardTool]; self. tool. backgroundColor = [UIColor cle ArColor]; self. tool. barTintColor = [UIColor lightGrayColor]; // set the proxy of the keyboard tool to the current controller, which is used to receive btn click events and perceive btnType self. tool. toolDelegate = self; // 1. set the keyboard Toolbar of all text boxes to custom KeyboardTool for (UITextField * field in self. view. subviews) {// if it is not a text input box, continue if (! [Field isKindOfClass: [UITextField class]) continue; // The keyboard tool of each text input box is it... field. inputAccessoryView = self. tool; // array to save all text input box controls, followed by [self. allTextFields addObject: field]; // sets the proxy of each text input box to be the current controller field. delegate = self;} // 2. set the keyboard to DatePicker [self setInputViewForBirthdayTextField]; // 3. set the keyboard to DatePicker [self setInputViewForCityTextField]; // 4. load all data [self loadAllData];} // 2. input for birthday Box, set the keyboard to DatePicker-(void) setInputViewForBirthdayTextField {// set the keyboard for the birthday (no width or height or location required) UIDatePicker * datePicker = [[UIDatePicker alloc] init]; // set the region to Chinese Simplified Chinese datePicker. locale = [[NSLocale alloc] initWithLocaleIdentifier: @ "zh_CN"]; // The mode is: only the date datePicker is displayed. datePickerMode = UIDatePickerModeDate; // listens to the datePicker value change event [datePicker addTarget: self action: @ selector (datePickerValueChangeed :) forControlEvents: UIC OntrolEventValueChanged]; // set it to view self in the birthday input box. birthdayTextField. inputView = datePicker;} // 3. set the keyboard to DatePicker-(void) setInputViewForCityTextField {// set the city keyboard UIPickerView * picker = [[UIPickerView alloc] init]; // set the data source and proxy picker. dataSource = self; picker. delegate = self; // Display Indicator picker. showsSelectionIndicator = YES; // set it to view self in the city input box. cityTextField. inputView = picker;} // 4. load all data -( Void) loadAllData {// load the province data NSDictionary * dict = [NSDictionary dictionaryWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @ "cities" ofType: @ "plist"]; // All arrays self. provinceNameArr = dict [@ "provinces"]; // dictionary. The key is a province name and the value is an array of city names self. provinceName_cities_Dict = dict [@ "cities"];} // 2.1 listen to the event of changing the value of the birthday Selection control, assign a value to the birthday input box-(void) datePickerValueChangeed :( UIDatePicker *) picker {NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; formatter. dateFormat = @ "yyyy-MM-dd"; // value self in the birthday input box. birthdayTextField. text = [formatter stringFromDate: picker. date] ;}# pragma mark-PickerView data source method // total number of columns-(NSInteger) numberOfComponentsInPickerView :( UIPickerView *) pickerView {// The first column is named by province, the second column is the province-specific city array return 2;} // The number of rows in each column-(NSInteger) pickerView :( UIPickerView *) pickerView numberOfRowsInComponent :( NSInteger) compon Ent {if (component = 0) {// return the return self. provinceNameArr. count;} else {// return the row number NSUInteger rowNum = [pickerView selectedRowInComponent: 0] currently selected in column 1st; // first from the province name array, retrieve the corresponding provincial name NSString * pName = self. provinceNameArr [rowNum]; // obtain the city array by name in the dictionary, and return the length of NSArray * cityArr = self. provinceName_cities_Dict [pName]; return cityArr. count ;}}// what data is displayed per row in each column-(NSString *) pickerView :( UIPickerView *) pickerView TitleForRow :( NSInteger) row forComponent :( NSInteger) component {if (component = 0) {// The previous column shows the province name return self. provinceNameArr [row];} else {// returns the currently selected row number of column 1st NSUInteger rowNum = [pickerView selectedRowInComponent: 0]; // first from the province name array, retrieve the corresponding provincial name NSString * pName = self. provinceNameArr [rowNum]; // obtain the city array by name in the dictionary, and return the length of NSArray * cityArr = self. provinceName_cities_Dict [pName]; return cityArr [row] ;}// UIPickerVi When a row is selected, ew calls-(void) pickerView :( UIPickerView *) pickerView didSelectRow :( NSInteger) row inComponent :( NSInteger) component {// refresh the data in the next column, association result [pickerView reloadComponent: 1]; NSUInteger pRowNum = [pickerView selectedRowInComponent: 0]; // obtain the corresponding provincial name NSString * pName = self from the provincial name array first. provinceNameArr [pRowNum]; NSUInteger cRowNum = [pickerView selectedRowInComponent: 1]; // retrieve the city array by name in the dictionary, and return the corresponding city name NSArray * cit YArr = self. provinceName_cities_Dict [pName]; NSString * cName = cityArr [cRowNum]; // value self in the city input box. cityTextField. text = [NSString stringWithFormat: @ "% @", pName, cName] ;}# pragma mark-key !!!!!!!! KeyboardTool proxy method-(void) keyboardTool :( KeyboardTool *) tool buttonType :( KeyboardToolButtonType) type {if (type = kKeyboardToolButtonTypeDone) {// The input box of the current activity when you click Finish, cancel the first responder and exit the keyboard [self. currentTextField resignFirstResponder];} else {// retrieves the index of the current input box in the input box array, NSUInteger index = [self. allTextFields indexOfObject: self. currentTextField]; if (type = kKeyboardToolButtonTypePrevious) {// when you click the previous one, the index minus 1, index --;} el Se {// when you click Next, the index is added with 1, index ++;} // retrieves the input box of the corresponding index to become the first responder, call up the corresponding keyboard UITextField * field = self. allTextFields [index]; [field becomeFirstResponder] ;}# pragma mark-key point !!!!!!! UITextField proxy method-(void) textFieldDidBeginEditing :( UITextField *) textField {// remember the activated text box. self is used in keyboardTool: buttonClick: In other methods. currentTextField = textField; // obtain the index NSUInteger index = [self. allTextFields indexOfObject: textField]; // you can specify whether the next button is available. tool. nextBtn. enabled = index! = Self. allTextFields. count-1; // you can specify whether self. tool. previusbtn. enabled = index! = 0;} // This Is A delegate method of UITextField! // With This delegate, when we open the keyboard, click return to close the keyboard-(BOOL) textFieldShouldReturn :( UITextField *) textField {// End All edits and exit all keyboards, if YES is returned, [self. view endEditing: YES]; return YES;} @ end
Data Source
Keyboard Custom button settings
Generally, such a keyboard is mostly brand-name machines, and there will be drivers in the hardware drive disc. Or download it from the official website.
1. Install the hardware driver correctly,
2. There will be a custom program in the hardware driver. You can click it to redefine it.
Some custom programs are automatically started at random at startup, and are often 'artificially disabled 'or disabled by some acceleration software to speed up system startup. At this time, it is necessary to manually look for this program. You can also check through the uninstall program interface, which will show the installed program. If most programs know what to do, then do not know the program, search in the search bar and open it.
One keyboard key tool
We recommend that you use the press-key wizard, which is easy to set and can also customize the script. F12 starts to close the automatic button at F10 ..