2017-09-29 15 views
0

저는 scrollview 내의 뷰에 서식을 생성하고 있습니다. 그것은 두 개의 textField와 하나의 textView를 포함합니다. 나는 온라인 리소스 (like this one)의 일부 코드를 함께 엮어서 textField가보기에 너무 낮거나 키보드에 의해 방해받는 경우 스크롤 업하도록했습니다. 문제는 textViews에서 작동하지 않는 것입니다.키보드 위로 스크롤하려면 scrollview를 트리거하는 textview를 얻으려면 어떻게해야합니까?

textViews가 동일한 동작을 유발하지 않는 이유를 이해하기 위해 최선을 다했지만 실제로 도움이 될 수 있습니다.

import UIKit 

class AddAPlaceBasicInfoViewController: UIViewController, UITextFieldDelegate, UITextViewDelegate { 

// Outlets 
@IBOutlet weak var nameTextField: UITextField! 
@IBOutlet weak var categoryTextField: UITextField! 
@IBOutlet weak var descriptionTextView: UITextView! 
@IBOutlet weak var nextButton: UIButton! 
@IBOutlet weak var scrollView: UIScrollView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(noti:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil) 
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(noti:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil) 

    // Default to an disabled "Next" button. 
    nextButton.isEnabled = false 
    nextButton.backgroundColor = UIColor(red: 89/255, green: 89/255, blue: 89/255, alpha: 1/1) 

    // Check that fields are filled. 
    nameTextField.delegate = self 
    descriptionTextView.delegate = self 

    // Helper functions. 
    createToolbar() 
    descriptionTextViewSetup(descriptionTextView) 

} 

// Creates the done button above the category picker. 
func createToolbar() { 

    // Creates an instance of UIToolbar() named "toolbar". 
    let toolbar = UIToolbar() 
    toolbar.sizeToFit() 

    // Set up button properties. 
    let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(AddAPlaceBasicInfoViewController.dismissKeyboard)) 

    // Set color to teal. 
    doneButton.tintColor = UIColor(red: 0/255, green: 134/255, blue: 111/255, alpha: 1) 

    // Set up button in the toolbar and make it interactive. 
    toolbar.setItems([doneButton], animated: false) 
    toolbar.isUserInteractionEnabled = true 

    // Add the toolbar as an accessory view to the category picker. 
    nameTextField.inputAccessoryView = toolbar 
    categoryTextField.inputAccessoryView = toolbar 
    descriptionTextView.inputAccessoryView = toolbar 

    // Set toolbar's background to white. 
    toolbar.backgroundColor = UIColor.white 

} 

// Function to dismiss the keyboard. Used when the user taps the "Done" button in the toolbar. 
func dismissKeyboard() { 

    view.endEditing(true) 

    if nameTextField.text?.characters.count == 0 || categoryTextField.text?.characters.count == 0 || descriptionTextView.text == "What's this place like? (You'll be able to add a photo on the next screen)" { 

     nextButton.isEnabled = false 
     nextButton.backgroundColor = UIColor(red: 89/255, green: 89/255, blue: 89/255, alpha: 1/1) 

    } else { 

     nextButton.isEnabled = true 
     nextButton.backgroundColor = UIColor(red: 0/255, green: 134/255, blue: 111/255, alpha: 1/1) 

    } 

} 

// Function to create placeholder text. 

func descriptionTextViewSetup(_ textView: UITextView) { 

    // Modifications 
    descriptionTextView.text = "What's this place like? (You'll be able to add a photo on the next screen)" 
    descriptionTextView.textColor = UIColor(red: 199/255, green: 199/255, blue: 205/255, alpha: 1/1) 
    descriptionTextView.textContainer.lineFragmentPadding = 0 
    //descriptionTextView.textColor = UIColor.lightGray 

} 

//--------------------------------- 
// MARK: - Notification Center 
//--------------------------------- 

func keyboardWillHide(noti: Notification) { 
    let contentInsets = UIEdgeInsets.zero 
    scrollView.contentInset = contentInsets 
    scrollView.scrollIndicatorInsets = contentInsets 
} 


func keyboardWillShow(noti: Notification) { 

    guard let userInfo = noti.userInfo else { return } 
    guard var keyboardFrame: CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue else { return } 
    keyboardFrame = self.view.convert(keyboardFrame, from: nil) 

    var contentInset:UIEdgeInsets = scrollView.contentInset 
    contentInset.bottom = keyboardFrame.size.height 
    scrollView.contentInset = contentInset 
} 

} 
+0

이 답변을 확인 했습니까? [Swift를 사용하여 키보드로보기 이동] (https://stackoverflow.com/questions/26070242/move-view-with-keyboard-using-swift) –

답변

0

당신은 그들이 정보를 입력 할 수 있습니다 사용자를위한 양식을 작성하는 경우가 나는 정적 jQuery과 사용하는 것이 좋습니다 것 : 여기 내 VC 코드입니다. UIViewController가 UITableViewController 유형 인 경우 정적 UITableView를 사용할 수 있습니다. 정적 TableView를 사용하면 컨트롤을 배치하기가 매우 쉽습니다. UITableView에 이미 UIScrollView가 있으므로 UITextView에 포커스가있을 때 자동으로 스크롤됩니다.

시험해보기 : enter image description here