1

키패드가 나타날 때 UIViewController의 아래쪽 내용을 위쪽으로 이동하려고합니다. 보기 컨트롤러의 맨 아래에 UITextField가 있고 사용자가 클릭하면 키패드가 나타나고 i, t를 차단하여 사용자가 UITextField에 입력하는 내용을 볼 수 없도록합니다.키패드가 Swift를 사용하여 나타나는 것처럼 UIViewController의 내용을 위쪽으로 이동하는 방법

@IBOutlet var startTime : UITextField 

나는 이러한 목표를 달성하기 위해있는 UIScrollView 필요합니다 : 다음과 같이

은 내가 UITextField에 선언했다? 또는 키패드가 나타날 때 페이지의 내용을 위로 이동하는 방법이 있습니다.

답변

3

이렇게하려면 여러 가지 방법이 있지만 항상 키보드 관련 알림을 수신해야합니다. 그들은 obj-c와 같은 방식으로 작동합니다. 다음의 간단한 예에서는 키보드가 나타나면 텍스트 필드를 위로 이동하고 해지 될 때 텍스트 필드를 다시 아래로 이동하는 방법을 보여줍니다. 다음 예제는 UIViewController 구현입니다.

override func viewDidLoad() { 
    super.viewDidLoad() 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: nil); 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: nil); 
} 

deinit { 
    NSNotificationCenter.defaultCenter().removeObserver(self); 
} 

func keyboardWillShow(sender: NSNotification) { 
    let s:NSValue = sender.userInfo.valueForKey(UIKeyboardFrameEndUserInfoKey) as NSValue; 
    let rect :CGRect = s.CGRectValue(); 
    var frame = self.textField.frame; 
    frame.origin.y = frame.origin.y - rect.height; 
    self.textField.frame = frame; 
} 

func keyboardWillHide(sender: NSNotification) { 
    let s:NSValue = sender.userInfo.valueForKey(UIKeyboardFrameBeginUserInfoKey) as NSValue; 
    let rect :CGRect = s.CGRectValue(); 
    var frame = self.textField.frame; 
    frame.origin.y = frame.origin.y + rect.height; 
    self.textField.frame = frame; 
} 
1

최상위 등급 답변의 작동 방식을 잘 모르겠습니다. 그렇지 않다면 :

func keyboardWillShow(notification: NSNotification) { 
    if let info: NSDictionary = notification.userInfo { 
     let value: NSValue = info.valueForKey(UIKeyboardFrameEndUserInfoKey) as NSValue 
     let rect: CGRect = value.CGRectValue() 
     view_comment.y = rect.height - view_comment.h 
    } 
} 

valueForkey에 액세스하려면 사전을 NSDictionary로 캐스팅해야합니까?

관련 문제