2015-10-29 35 views
2

这是我的代码在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) 
    } 
} 

我的代码中是否有任何错误使占位符无法正常工作? 占位符已显示,但点击后并未消失。 谢谢。

+0

是你的问题'messageTextView'或'subjectTextView'发生了什么?你是否试图在他们身上写字,而你的占位符没有消失? ? –

+0

问题是messageTextView,并有subjectTextField不SubjectTextView 谢谢你@WilliamKinaan – Faisal

+0

所以只是为了得到你的问题,你有占位符,虽然你正在写文本视图? –

回答

3

您正在设置TextView的文本,而不是占位符。

这段代码messageTextView.text = "Placeholder"设置文本不是占位符

如果你的观点是一个UITextView,然后检查这一问题Text View Placeholder Swift

+0

我认为线是属于文本框,我试图代码 messageTextView.placeholder =“myplaceholder” ,它说“类型的值‘的UITextView’没有成员‘占位符’” @WilliamKinaan – Faisal

+0

心不是该消息文本查看ui文本视图? (现在在移动设备上,看不到你的代码) –

+0

我会在20分钟内检查,不用担心 –