2016-06-29 13 views
5

यहां पोस्ट किए गए अधिकांश समाधानों को आजमाने के बाद, मुझे अभी भी स्क्रॉलव्यू में ऊपर कीबोर्ड दिखाने के लिए टेक्स्टफील्ड को स्थानांतरित करने में समस्या हो रही है। Link 1 Link 2 Link 3स्विफ्ट: ScrollRectToVisible काम नहीं कर रहा

मैं ही कार्य 1 क्षेत्र है कि जब यह पता चलता है एक साइनअप स्क्रीन पर काम कर रहा हूँ:

ये लिंक मैं Stackoverflow समाधान से पीछा कर रहे हैं। प्वाइंट के साथ फ्रेम और setContentOffset साथ

class SignUpViewController: UIViewController, UITextFieldDelegate, UIScrollViewDelegate, UIPopoverPresentationControllerDelegate { 

@IBOutlet var firstNameTextField: UITextField! 
@IBOutlet var lastNameTextField: UITextField! 
@IBOutlet var phoneNumberTextField: UITextField! 
@IBOutlet var emailTextField: UITextField! 
@IBOutlet var submitButton: UIButton! 
@IBOutlet var professionButton: UIButton! 

var scrollView: UIScrollView? 
var activeTextField:UITextField? = UITextField() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let notificationCenter = NSNotificationCenter.defaultCenter() 

    notificationCenter.addObserver(self, selector: #selector(SignUpViewController.keyboardWasShown(_:)), name: UIKeyboardWillShowNotification, object: nil) 
    notificationCenter.addObserver(self, selector: #selector(SignUpViewController.keyboardWillBeHidden(_:)), name: UIKeyboardWillHideNotification, object: nil) 
    scrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height)) 
    scrollView!.contentSize = CGSizeMake(self.view.frame.width, self.view.frame.height) 

    defaultSettings() 
} 

func defaultSettings() { 
    self.firstNameTextField.delegate = self 
    self.lastNameTextField.delegate = self 
    self.emailTextField.delegate = self 
    self.phoneNumberTextField.delegate = self 
} 

func deregisterFromKeyboardNotifications() 
{ 
    //Removing notifies on keyboard appearing 
    NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillShowNotification, object: nil) 
    NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: nil) 
} 

func keyboardWasShown(notification: NSNotification) 
{ 
    //Need to calculate keyboard exact size due to Apple suggestions 
    //self.scrollView!.scrollEnabled = true 
    var info : NSDictionary = notification.userInfo! 
    var keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue().size 
    var contentInsets : UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize!.height, 0.0) 

    self.scrollView!.contentInset = contentInsets 
    self.scrollView!.scrollIndicatorInsets = contentInsets 

    var aRect : CGRect = self.view.frame 
    aRect.size.height -= keyboardSize!.height 
    if (!CGRectContainsPoint(aRect, activeTextField!.frame.origin)) 
    { 
//   print(activeTextField?.frame) 
//   var scrollPoint = CGPointMake(0.0, activeTextField!.frame.origin.y - (keyboardSize!.height-15)) 
     self.scrollView!.scrollRectToVisible((activeTextField?.frame)!, animated: true) 
     //self.scrollView?.setContentOffset(scrollPoint, animated: true) 
    } 
} 


func keyboardWillBeHidden(notification: NSNotification) 
{ 
    //Once keyboard disappears, restore original positions 
    //var info : NSDictionary = notification.userInfo! 
    //var keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue().size 
    var contentInsets : UIEdgeInsets = UIEdgeInsetsZero 
    self.scrollView!.contentInset = contentInsets 
    self.scrollView!.scrollIndicatorInsets = contentInsets 
//  self.view.endEditing(true) 
//  self.scrollView!.scrollEnabled = false 

} 

func textFieldDidBeginEditing(textField: UITextField) 
{ 
    activeTextField = textField 
} 

func textFieldDidEndEditing(textField: UITextField) 
{ 
    activeTextField = nil 
} 

आप देख सकते हैं, मैं कोशिश की है scrollRectToVisible:

यहाँ मेरी कोड है। दोनों काम नहीं किया। जबकि कोड ईमेल टेक्स्टक्स्ट पर छिपे हुए टेक्स्टफील्ड के रूप में सही है।

+1

उपयोग TPKeyboardAvoiding https://github.com/michaeltyson/TPKeyboardAvoiding। यह बहुत आसान है, नहीं, यह सब का ख्याल रखेगा। –

+0

@भारतमोदी, आपकी टिप्पणी के लिए धन्यवाद। मैं ऐप्पल अनुशंसित विधि का उपयोग करने के लिए, तृतीय पक्ष एपीआई का उपयोग नहीं करना चाहता था। –

उत्तर

6

मैं आपके द्वारा किए गए एक ही मुद्दे से भी संघर्ष कर रहा था, मुझे नहीं पता कि आप सफल हुए हैं और समाधान मिला है, लेकिन मैंने अंततः scrollRectToVisible के बजाय setContentOffset फ़ंक्शन का उपयोग किया और यह काम किया।

स्विफ्ट 3.x उदाहरण:

if (!aRect.contains(activeTextView!.frame.origin)) { 
       self.scrollView.setContentOffset(CGPoint(x:0, y:self.activeTextView!.frame.origin.y), animated: true) 
} 
संबंधित मुद्दे