我也試著自己寫了乙個小小對話方塊,先看一下樣式
主要的功能有
通過功能區分我們可以大致將該檢視分成三個部分,第乙個是分割線,寬度為1的uiview
,第二個是類似html中的具有placeholder功能的輸入框,最後是按鈕button。
輸入框是由uilabel
+uitextview
+uiimageview
(藍色線)實現的,uitextview
的內容長度變化可以通過監聽uitextviewtextdidchangenotification
來判斷當前輸入框的輸入字數。
先建乙個類繼承uitextview
新增placetext和placecolor到頭檔案由於外部改變placetext內容,現在新增uilable
-(void)placetextlabel
_placetextlab.text=self.placetext;
[_placetextlab sizetofit];
[_placetextlab setframe:cgrectmake(8, 8, cgrectgetwidth(self.bounds)-16, cgrectgetheight(_placetextlab.frame))];
}if (self.text.length==0 && self.placetext.length>0)
}
用photoshop做乙個單行畫素的類似藍線的,儲存為png格式,必須設定的uiimageview
的顯示模式
-(void)addlineview
uitextview
的設定會相對麻煩一些,重寫初始化**
-(instancetype)initwithframe:(cgrect)frame placetext:(nsstring *)placetext placecolor:(uicolor *)placecolor
return self;
}
由於輸入框會隨著輸入的文字而不斷增高,我們需要把這個值傳遞給父檢視,讓父檢視也能根據內容而增大,可以通過委託來,但是委託又有點重量級,這裡我們可以用更簡單的block
這裡首先我想到的是通過監聽uitextviewtextdidchangenotification
來實時監測輸入,輸入實時變化引起高度的實時變化。但是不幸的是我掉坑里了,我發現當我們輸入一行到頭以後再輸入乙個字元換行後,這個時候高度居然沒有變。再輸入這一行的第二個字元時候,高度值才發生變化。我想應該是高度變化之前,已經傳送了通知所以導致我們的高度變化其實不是實時的,如果這樣就不能用這種方式了,所幸的我們還可以使用uitextview
的乙個簡單函式
cgsize size= [self sizethatfits:cgsizemake(self.contentsize.width, 1000.0)];
這樣size就是我們要的大小了。
-(void)textchange:(nsnotification *)notificationelse
[self addlineview];
if (self.placetext.length==0)
[uiview animatewithduration:0.5 animations:^else
}];}-(void)addsubline:(uiview *)view
[self addsubview:view];
self.viewsize(size);//先判斷一下更好。。。
}
這裡使用block傳遞size,我們先宣告乙個block的私有變數,再寫乙個方法用來賦值,block的實現也是由呼叫該物件的類建立的。然後像委託一樣呼叫就可以,afnetwork中我們可以到處看到block而不像他的前輩asihttprequest到處是委託。
主要的輸入框完工後,就能組裝了,先新建乙個uiview子類。uiview需要和鍵盤高度保持一致。需要監聽鍵盤滑出滑入的通知uikeyboardwillchangeframenotification
,實時改變輸入框的高度
-(void)keyboardwillshow:(nsnotification *)notification completion:^(bool finished) ];
}
這裡的maxy是指輸入框的y方向的標準位置。在沒有鍵盤的情況下是[uiscreen mainscreen].bounds.size.height
,在有鍵盤的情況是鍵盤的y值,在輸入框字元變化的時候實時改變他的高度
如下面圖所示
-(void)textviewdidchange:(cgsize)size
以上是比較重要的uiview高度自適應變化的問題
這裡button與外部類的呼叫關係也採用的是block的方式
@property (nonatomic,copy)void(^sendtext)(nsstring *);
-(void)sendmessage:(void (^)(nsstring * text))inputtext
}
-(void)buttonclick
-(void)sendinputtextelse}}
最後附上我的sourcecode,獻給那些在ios道路上一起默默前進的小白們,我也是小白,求寬恕的對待o(∩_∩) iOS 輸入框UITextField輸入限制字數
對某些ios應用來講,輸入框需要有字數的限制,例如,密碼要求輸入最多6位數。那麼如果僅僅只是在 bool textfield uitextfield textfield shouldchangecharactersinrange nsrange range replacementstring nss...
QT IP輸入框的實現
流程圖 我首先在xx.ui介面中畫了四個lineedit 分別取名為 le ip 1,le ip 2,le ip 3,le ip 4 做輸入ip位址用,限定了最大輸入長度為3 三個label 輸入點 最外面的框是乙個容器frame 遇到的問題 解決方法 只能採取笨辦法判斷是哪個lineedit發出訊...
IOS提示框變成秘密輸入框
ialertview alert uialertview alloc initwithtitle alert message this is an example alert delegate self cancelbuttontitle hide otherbuttontitles nil ale...