先上圖再說話#
123.png
最近公司項(xiàng)目需求要做一個(gè)自定義價(jià)格鍵盤,雖說網(wǎng)上應(yīng)該有很多demo,但是...還是自己做一個(gè)吧~也方便日后維護(hù).
這次封裝的鍵盤采用的是xib+代碼的形式創(chuàng)建的,因?yàn)轭^部還有另外一個(gè)樣式,所以第二個(gè)樣式(如下圖)就采用代碼來創(chuàng)建了。
33.png
如何切換樣式?
- 根據(jù)setter方法賦值的同時(shí)重新更新約束
- (void)setSaleType:(SaleType)saleType{
_saleType = saleType;
if (saleType == SaleTypeResell) {
self.selTextField = self.priceTextField;
self.topView.hidden = NO;
[self.toLabel removeFromSuperview];
[self.priceLabel1 removeFromSuperview];
[self.priceTextField1 removeFromSuperview];
[self.priceTextField2 removeFromSuperview];
}else if (saleType == SaleTypewant2By){
self.topView.hidden = YES;
self.selTextField = self.priceTextField1;
[self addSubview:self.priceLabel1];
[self addSubview:self.toLabel];
[self addSubview:self.priceTextField1];
[self addSubview:self.priceTextField2];
[self configWant2ByConstrains];
}
}
驗(yàn)證輸入字符方法
- (BOOL)checkWith:(NSString *)str{
BOOL res = YES;
// 開頭已經(jīng)有0
if ([self.selTextField.text isEqualToString:@"0"]) {
if ([str isEqualToString:@"0"]) {
return NO;
}else if (![str isEqualToString:@"."]){
self.selTextField.text = @"";
}
}
// 最高100萬
if ([[self.selTextField.text stringByAppendingString:str] doubleValue] > 1000000) return NO;
// 小數(shù)點(diǎn)后面的處理
if ([self.selTextField.text containsString:@"."]){
NSRange range = [self.selTextField.text rangeOfString:@"."];
NSString *subStr = [self.selTextField.text substringFromIndex:range.location+1];
if (subStr.length == 2) return NO;
if ([str isEqualToString:@"."]) return NO;
}
return res;
}
//緊接著點(diǎn)擊數(shù)字的方法
- (IBAction)didClick1{
NSString *str = @"1";
if (![self checkWith:str]) return;
self.selTextField.text = [self.selTextField.text stringByAppendingString:str];
}
...
- 處理開頭有0
- 需求是不能大于100萬
- 小數(shù)點(diǎn)后面的細(xì)節(jié)處理
對外公開的方法
// 顯示鍵盤的方法
- (void)show{
if (self.need_coverView) {
[self.superview addSubview:self.coverView];
[self.superview bringSubviewToFront:self];
[self.coverView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(UIEdgeInsetsMake(0, 0, 0, 0));
}];
[self mas_makeConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(self.contentHeight);
make.left.right.bottom.mas_equalTo(self.superview);
}];
}
if (self.saleType == SaleTypewant2By) [self.priceTextField1 becomeFirstResponder];
else [self.priceTextField becomeFirstResponder];
}
為鍵盤添加外部灰色遮罩,同時(shí)將鍵盤顯示出來(其實(shí)此處可以加點(diǎn)動畫).
// // 隱藏鍵盤
- (void)dismiss{
[self.coverView removeFromSuperview];
[self removeFromSuperview];
}
// 重置鍵盤
- (void)reset{
self.priceTextField.text = @"";
self.oriPriceTextField.text = @"";
self.priceTextField1.text = @"";
self.priceTextField2.text = @"";
}
然后提供對外的代理方法
- (void)salePriceKeyboardViewDidClickDismiss:(JFSalePriceKeyboardView *)priceKeyboardView;
- (void)salePriceKeyboardViewDidClickBack:(JFSalePriceKeyboardView *)priceKeyboardView;
- (void)salePriceKeyboardViewDidClickConfirm:(JFSalePriceKeyboardView *)priceKeyboardView;
<b>另外要注意的是:點(diǎn)擊textfield
如何不彈出系統(tǒng)的鍵盤泌绣?
self.priceTextField.inputView=[[UIView alloc]initWithFrame:CGRectZero];
最后
在Controller里調(diào)用鍵盤:
[self.view addSubview:self.priceKeyboardView];
[self.priceKeyboardView show];
這里只是對鍵盤View的一個(gè)封裝,具體的業(yè)務(wù)邏輯每個(gè)公司不一樣预厌,就不放出來了阿迈。<a >代碼在這里</a>
??別忘了點(diǎn)個(gè)贊哦~