多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > 鍵盤處理例子思路

鍵盤處理例子思路

來源:程序員人生   發布時間:2014-12-13 09:23:24 閱讀次數:3019次

鍵盤處理例子思路

步驟1:簡單搭建界面

步驟2、自定義XIB,用來描寫性別
+ (
id)sexBox
{
   
return [[NSBundle mainBundle] loadNibNamed:@"MJSexBox" owner:nil options:nil][0];
}

2.1監聽性別按鈕點擊,修改按鈕的狀態
#pragma mark 改變了性別選擇
- (IBAction)sexChange {
   
if (_manBtn.enabled) { // 點擊了男的
        _manBtn.enabled =
NO;
        _womanBtn.enabled =
YES;
    }
else { // 點擊了女的
        _manBtn.enabled =
YES;
        _womanBtn.enabled =
NO;
    }
}
2.2.在控制器中添加性別選擇控件
MJSexBox *sexBox = [MJSexBox sexBox];
sexBox.center = CGPointMake(
15070);
[
self.view addSubview:sexBox]; 
步驟3:自定義鍵盤
3.1.設置生日鍵盤
// 1.1.生日
UIDatePicker *datePicker = [[UIDatePicker alloc] init];
datePicker.datePickerMode = UIDatePickerModeDate;
// 只顯示日期5
datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:
@"zh_CN"];
[datePicker addTarget:
self action:@selector(birthdayChange:) forControlEvents:UIControlEventValueChanged];
_birthdayField.inputView = datePicker;
// 設置鍵盤為日期選擇控件
_birthdayField.delegate =
self;


3.2制止生日鍵盤輸入文字
#pragma mark - UITextField代理
#pragma mark
每當用戶輸入文字的時候就會調用這個方法,返回NO,制止輸入;但會YES,允許輸入
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
   
return NO;
}

3.3 監聽生日鍵盤的值改變事件
#pragma mark - 生日改變
- (void)birthdayChange:(UIDatePicker *)picker
{
   
// 1.獲得當前時間
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.dateFormat =
@"yyyy-MM-dd";
    NSString *time = [fmt stringFromDate:picker.date];
   
   
// 2.賦值到文本框
    _birthdayField.text = time;
}

步驟4、設置城市
4.1xib描寫城市鍵盤,并且設置UIPickerView的代理和數據源,創建自定義視圖。
+ (
id)cityPicker
{
   
return [[NSBundle mainBundle] loadNibNamed:@"MJCityPicker" owner:nil options:nil][0];
}
4.2加載數據,在awakeFromNib中調用
#pragma mark 任何對象從xib中創建終了的時候都會調用1次
- (void)awakeFromNib
{
    NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:
@"cities.plist" ofType:nil]];
   
    _provinces = [NSMutableArray array];
   
for (NSDictionary *dict in array) {
        MJProvince *p = [MJProvince provinceWithDict:dict];
        [_provinces addObject:p];
    }
}
4.3實現數據源和代理方法。

#pragma mark - UIPickerView數據源方法
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
   
return 2;
}

#pragma mark component列有多少行數據
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
   
if (component == 0) { // 多少個省分
       
return _provinces.count;
    }
else { // 當前選中省分的行數(城市個數)
       
// 1.取得選中了哪個省
       
int pIndex = [pickerView selectedRowInComponent:0];
       
       
// 2.取出省分模型
        MJProvince *p = _provinces[pIndex];
       
       
// 3.返回當前省分城市的個數
       
return p.cities.count;
    }
}

#pragma mark - UIPickerView代理方法
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
   
if (component == 0) { //顯示哪一個省分
       
// 1.取出省分模型
        MJProvince *p = _provinces[row];
       
       
// 2.取出省分名稱
       
return p.name;
    }
else { // 顯示哪一個城市
       
// 1.取得選中了哪個省
       
int pIndex = [pickerView selectedRowInComponent:0];
       
       
// 2.取出省分模型
        MJProvince *p = _provinces[pIndex];
       
       
// 3.返回對應行的城市名稱
       
return p.cities[row];
    }
}

#pragma mark 監聽選中了某1列的某1行
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
   
if (component == 0) { // 改變了省分
       
// 刷新第1列的數據(重新刷新數據,重新調用數據源和代理的相應方法取得數據)
        [pickerView reloadComponent:
1];
       
       
// 選中第1列的第0
        [pickerView selectRow:
0 inComponent:1 animated:YES];
    }
   
   
// 更改文字
   
// 1.取得選中的省分名稱
   
int pIndex =  [pickerView selectedRowInComponent:0];
    MJProvince *p = _provinces[pIndex];
   
   
// 2.取得選中的城市位置
   
int cIndex = [pickerView selectedRowInComponent:1];
   
   
// 3.通知代理
   
if ([_delegate respondsToSelector:@selector(cityPicker:citySelectWithProvince:city:)]) {
        [_delegate cityPicker:
self citySelectWithProvince:p.name city:p.cities[cIndex]];
    }
}

4.4調用自定義視圖設置城市鍵盤
設置城市
MJCityPicker *cityPicker = [MJCityPicker cityPicker];
cityPicker.delegate =
self;
_cityField.inputView = cityPicker;
// 設置鍵盤為pickerview
_cityField.delegate =
self;

#pragma mark - MJCityPicker代理方法
#pragma mark
選中了某個城市就會調用
- (void)cityPicker:(MJCityPicker *)cityPicker citySelectWithProvince:(NSString *)province city:(NSString *)city
{
    _cityField.text = [NSString stringWithFormat:
@"%@ %@", province, city];
}

4.5  給自定義城市鍵盤聲明1個協議,并添加1個代理屬性,當轉動鍵盤的時候,通知代理做些事情.

@protocol MJCityPickerDelegate <NSObject]]>

@optional
- (
void)cityPicker:(MJCityPicker *)cityPicker citySelectWithProvince:(NSString *)province city:(NSString *)city;

@end

4.6 在控制器中實現代理協議的方法。
#pragma mark - MJCityPicker代理方法
#pragma mark
選中了某個城市就會調用
- (void)cityPicker:(MJCityPicker *)cityPicker citySelectWithProvince:(NSString *)province city:(NSString *)city
{
    _cityField.text = [NSString stringWithFormat:
@"%@ %@", province, city];
}

步驟5:工具條
5.1自定義1個xib描寫工具條
+ (
id)keyboardTool
{
   
return [[NSBundle mainBundle] loadNibNamed:@"MJKeyboardTool" owner:nil options:nil][0];
}

5.2toolbarview包裝起來,目的不讓外界修改toolbar,由于外界拿到的是UIView,而不是toolbar,就不能直接獲得toolbar里面的屬性了。

5.3自定義1個自定義工具條類,和xib綁定。
- (
IBAction)previous; // 上1個
- (
IBAction)next; // 下1個
- (
IBAction)done; // 完成

5.4 定義1個協議,通知代理按鈕點擊事件
@optional
- (
void)keyboardTool:(MJKeyboardTool *)keyboardTool itemClick:(MJKeyboardToolItemType)itemType;
@end

5.5定義1個枚舉類型,辨別按鈕
typedef enum {
    MJKeyboardToolItemTypePrevious,
// 上1個
    MJKeyboardToolItemTypeNext,
// 下1個
    MJKeyboardToolItemTypeDone
// 完成
} MJKeyboardToolItemType;

5.6當點擊按鈕時,通知代理

#pragma mark 上1個
- (void)previous
{
   
// 通知代理(上1個按鈕被點擊了)
   
if ([_delegate respondsToSelector:@selector(keyboardTool:itemClick:)]) {
        [_delegate keyboardTool:
self itemClick:MJKeyboardToolItemTypePrevious];
    }
}

#pragma mark 下1個
- (void)next
{
   
// 通知代理(下1個按鈕被點擊了)
   
if ([_delegate respondsToSelector:@selector(keyboardTool:itemClick:)]) {
        [_delegate keyboardTool:
self itemClick:MJKeyboardToolItemTypeNext];
    }
}

#pragma mark 完成
- (void)done
{
   
// 通知代理(完成按鈕被點擊了)
   
if ([_delegate respondsToSelector:@selector(keyboardTool:itemClick:)]) {
        [_delegate keyboardTool:
self itemClick:MJKeyboardToolItemTypeDone];
    }
}

5.7 讓控制器作為工具條的代理,并實現工具條代理方法

#pragma mark - MJKeyboardTool代理方法
#pragma mark
點擊了工具條上面的按鈕就會調用
- (void)keyboardTool:(SUNKeyboardTool *)keyboardTool itemClick:(SUNKeyboardToolItemType)itemType
{
   
if (itemType == doneKeyboardToolItemType) {
        [
self.view endEditing:YES];
    }
else{
       
int index = [_fields indexOfObject:_focusedField];
       
if (itemType == previousKeyboardToolItemType) {
            index--;
        }
else{
            index++;
        }
       
// 變成第1響應者
        [
_fields[index] becomeFirstResponder];
    }
}


5.8 監聽所有文本框的開始編輯,設置所有文本框的代理為控制器
// 3.取得所有的文本輸入框
MJKeyboardTool *tool = [MJKeyboardTool keyboardTool];
tool.delegate =
self;
for (UIView *child in self.view.subviews) {
   
// 如果是文本輸入框,就設置工具條
   
if ([child isKindOfClass:[UITextField class]]) {
        UITextField *field = (UITextField *)ch
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产精品久久久久久一区二区 | 日韩中文字幕一区 | 久久亚洲精品无码观看不卡 | 国产v精品成人免费视频400条 | 国产啪视频1000部免费视频 | 国产尤物精品视频 | 国产成人美女福利在线观看 | 亚洲精品福利网站 | 久久88香港三级台湾三级中文 | 日本一级免费 | 中文字幕一区在线观看视频 | 日本一区二区三区视频在线观看 | 欧美高清 hd video | 国产免费午夜a无码v视频 | 国产视频久久久久 | 国产精品免费小视频 | 欧美综合视频在线观看 | 最近免费字幕高清在线观看 | 欧美性猛交xxxxx免费看 | 国产1区二区 | a毛片免费播放全部完整 | 最近更新在线中文字幕一页 | 日韩亚洲国产综合久久久 | 日韩一区二区在线视频 | 一级一级一级毛片免费毛片 | 欧美性受xxxx喷水大胸 | 日本护士xxxx视频 | 亚洲 在线播放 | 国产精品第一页在线 | 成人午夜在线视频 | 最新色网址 | 欧美黄色a级| 高跟鞋性xxxxhd | 狍和美女一级aa毛片 | 精品一区二区三区在线视频观看 | 久久国产精品自由自在 | 欧美成人性生活视频 | 精品视频在线观看免费 | 波多野结衣免费线在线 | 性欧美videos另类视频 | 亚洲精品免费在线观看 |