2015-11-05 20 views
1

我在正確處理鍵盤時遇到問題。Swift textfield - 決定視圖是否需要向上推

整個視圖充滿文本字段。

當我與工作的通知到移動視圖了上文本框不再可見:

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) 

} 

func keyboardWillShow(sender: NSNotification) { 
    self.view.frame.origin.y -= 150 
} 

func keyboardWillHide(sender: NSNotification) { 
    self.view.frame.origin.y += 150 
} 

有一個你的想法選擇了哪個文本框(後面即將到來的如何區分鍵盤或鍵盤上方)來決定視圖是否必須推高?

感謝

回答

2

您不應該上下移動父視圖。通過將所有文本字段放置在滾動視圖中,而不是使用通知的最佳方式是。後來在您的視圖控制器類,你可以使用文本字段的委託方法

- (void)textFieldDidBeginEditing:(UITextField *)textField 

在這個方法中設置了滾動contentOffset屬性就像當文本字段辭職第一響應,這

scrollView.contentOffset = CGPointMake(0, textField.center.y-80); // you can change 80 to whatever which fits your needs 

後來攻文本之外時那麼你需要設置滾動視圖的偏移值。你可以使用這個文本字段的委託方法來重新設置滾動視圖偏移

- (void)textFieldDidEndEditing:(UITextField *)textField{ 
     scrollView.contentOffset = CGPointMake(0,-80); 
} 

注意:您需要在您的視圖中的每個文本字段中有自己的代表作爲您的UIViewController實例。您還需要您的UiViewController採用UITextFieldDelegate

3

您很可能希望在滾動視圖文本字段,那麼你應該更改視圖框的高度,而不是產地。一旦你改變框架,你可以滾動視圖內容,以確保你想要的部分是可見的。

1

我知道沒有辦法知道使用通知選擇了哪個UITextField

爲此,我建議分配每個的UITextField獨特的標籤值和委託屬性各分配到同一的UIViewController實例。

有視圖控制器採用UITextFieldDelegate協議並實施textFieldShouldBeginEditing(_:)

所有UITextFieldDelegate Protocol方法接聽的UITextField對象,你就可以讀取標籤屬性值,以確定哪些文本框成爲第一個響應並作出來自那裏的決定。

相關問題