這是我的代碼在xcode與swift 2.請先看看它。UITextView佔位符沒有消失點擊後
import UIKit
class sendComplaintViewController: UIViewController, UITextViewDelegate {
@IBOutlet weak var subjectTextField: UITextField!
@IBOutlet weak var typeDropDown: IQDropDownTextField!
@IBOutlet weak var messageTextView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
typeDropDown.isOptionalDropDown = false
typeDropDown.itemList = ["Choose Category","Complaint", "Suggestion"]
// Do any additional setup after loading the view.
messageTextView.text = "Placeholder"
messageTextView.textColor = UIColor.lightGrayColor()
messageTextView.becomeFirstResponder()
messageTextView.selectedTextRange = messageTextView.textRangeFromPosition(messageTextView.beginningOfDocument, toPosition: messageTextView.beginningOfDocument)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//placeholder textview
func messageTextView(messageTextView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
// Combine the textView text and the replacement text to
// create the updated text string
let currentText:NSString = messageTextView.text
let updatedText = currentText.stringByReplacingCharactersInRange(range, withString:text)
// If updated text view will be empty, add the placeholder
// and set the cursor to the beginning of the text view
if updatedText.isEmpty {
messageTextView.text = "Placeholder"
messageTextView.textColor = UIColor.lightGrayColor()
messageTextView.selectedTextRange = messageTextView.textRangeFromPosition(messageTextView.beginningOfDocument, toPosition: messageTextView.beginningOfDocument)
return false
}
// Else if the text view's placeholder is showing and the
// length of the replacement string is greater than 0, clear
// the text view and set its color to black to prepare for
// the user's entry
else if messageTextView.textColor == UIColor.lightGrayColor() && !text.isEmpty {
messageTextView.text = nil
messageTextView.textColor = UIColor.blackColor()
}
return true
}
func textViewDidChangeSelection(messageTextView: UITextView) {
if self.view.window != nil {
if messageTextView.textColor == UIColor.lightGrayColor() {
messageTextView.selectedTextRange = messageTextView.textRangeFromPosition(messageTextView.beginningOfDocument, toPosition: messageTextView.beginningOfDocument)
}
}
}
//border textview
override func viewDidLayoutSubviews() {
// Creates the bottom border
let borderBottom = CALayer()
let borderWidth = CGFloat(2.0)
borderBottom.borderColor = UIColor.grayColor().CGColor
borderBottom.frame = CGRect(x: 0, y: messageTextView.frame.height - 1.0, width: messageTextView.frame.width , height: messageTextView.frame.height - 1.0)
borderBottom.borderWidth = borderWidth
messageTextView.layer.addSublayer(borderBottom)
messageTextView.layer.masksToBounds = true
// Creates the Top border
let borderTop = CALayer()
borderTop.borderColor = UIColor.grayColor().CGColor
borderTop.frame = CGRect(x: 0, y: 0, width: messageTextView.frame.width, height: 1)
borderTop.borderWidth = borderWidth
messageTextView.layer.addSublayer(borderTop)
messageTextView.layer.masksToBounds = true
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
@IBAction func sendButtonTapped(sender: AnyObject){
//let controltype = controlTypeTextField.selectedItem
let subject = subjectTextField.text
let type = typeDropDown.selectedItem
let complaintMessage = messageTextView.text
let userId = NSUserDefaults.standardUserDefaults().stringForKey("userId")
if(type == nil || type! == "Choose Category"){
displayAlertMessage("Please Choose Category")
return
}
if(subject!.isEmpty || type!.isEmpty || complaintMessage!.isEmpty){
//display an alert message
displayAlertMessage("All fields are requiered to fill in")
return
}
//input fungsi mbprog
let spinningActivity = MBProgressHUD.showHUDAddedTo(self.view, animated: true)
spinningActivity.labelText = "Loading"
spinningActivity.detailsLabelText = "Please wait"
//Send HTTP POST
let myUrl = NSURL(string: "");
let request = NSMutableURLRequest(URL:myUrl!);
request.HTTPMethod = "POST";
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);
NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in
dispatch_async(dispatch_get_main_queue()){
spinningActivity.hide(true) //waiting send data to server (signup)
if error != nil{
self.displayAlertMessage(error!.localizedDescription)
return
}
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary
if let parseJSON = json {
let complaintId = parseJSON["complaintId"] as? String
if(complaintId != nil)
{
let myAlert = UIAlertController(title: "Alert", message: "Success!", preferredStyle: UIAlertControllerStyle.Alert);
let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default){(action) in
self.dismissViewControllerAnimated(true, completion: nil)
}
myAlert.addAction(okAction);
self.presentViewController(myAlert, animated: true, completion: nil)
} else {
let errorMessage = parseJSON["message"] as? String
if(errorMessage != nil)
{
self.displayAlertMessage(errorMessage!)
}
}
}
} catch{
//print(error)
print(error)
if data != nil {
let string = String(data: data!, encoding: NSUTF8StringEncoding)
print(string)
}
print(response)
}
}
}).resume()
}
@IBAction func cancelButtonTapped(sender: AnyObject) {
self.dismissViewControllerAnimated(true, completion: nil)
}
func displayAlertMessage(userMessage:String){
let myAlert = UIAlertController(title: "Alert", message: userMessage, preferredStyle: UIAlertControllerStyle.Alert);
let okAction = UIAlertAction(title: "ok", style: UIAlertActionStyle.Default, handler: nil)
myAlert.addAction(okAction);
self.presentViewController(myAlert, animated: true, completion: nil)
}
}
我的代碼中是否有任何錯誤使佔位符無法正常工作? 佔位符已顯示,但點擊後並未消失。 謝謝。
是你的問題'messageTextView'或'subjectTextView'發生了什麼?你是否試圖在他們身上寫字,而你的佔位符沒有消失? ? –
問題是messageTextView,並有subjectTextField不SubjectTextView 謝謝你@WilliamKinaan – Faisal
所以只是爲了得到你的問題,你有佔位符,雖然你正在寫文本視圖? –