2016-04-07 21 views
1

iOS'ta yeniyim. Ben bir UITextFieldUITableView ve UITextField ve UITableView aşağıda bulunan bir sohbet uygulaması yapıyorum UIScrollView içinde (self.scrollView.scrollEnabled = NO; tarafından kaydırma görünümünde kaydırma görünümünü devre dışı bıraktım).
Ben UITextField dokunun, klavye gösterildi, bu yüzden bu kod ile Managing the Keyboard docIOS: UIScrollView içinde UITextField + UITableView

// Called when the UIKeyboardDidShowNotification is sent. 
    - (void)keyboardWasShown:(NSNotification*)aNotification 
    { 
     NSDictionary* info = [aNotification userInfo]; 
     CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

     UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0); 
     self.scrollView.contentInset = contentInsets; 
     self.scrollView.scrollIndicatorInsets = contentInsets; 

     // If active text field is hidden by keyboard, scroll it so it's visible 
     // Your app might not need or want this behavior. 
     CGRect aRect = self.view.frame; 
     aRect.size.height -= kbSize.height; 
     if (!CGRectContainsPoint(aRect, self.activeField.frame.origin)) { 
      [self.scrollView scrollRectToVisible:self.activeField.frame animated:YES]; 
     } 
    } 

    // Called when the UIKeyboardWillHideNotification is sent 
    - (void)keyboardWillBeHidden:(NSNotification*)aNotification 
    { 
     UIEdgeInsets contentInsets = UIEdgeInsetsZero; 
     self.scrollView.contentInset = contentInsets; 
     self.scrollView.scrollIndicatorInsets = contentInsets; 
    } 

    - (void)textFieldDidBeginEditing:(UITextField *)textField 
    { 
     self.activeField = textField; 
    } 

    - (void)textFieldDidEndEditing:(UITextField *)textField 
    { 
     self.activeField = nil; 
    } 

, olduğunu
başarılı klavyenin Ama sorunun yukarıda benim TextField hareketini takip klavyenin üzerindeki etmek UITextField taşıyın: TableView'da, klavye gösterildiğinde üstte bazı öğeleri (yaklaşık 2 öğe) görmek için kaydırma yapamıyorum.
klavye gösterildiğinde Örneğin benim tableview 10items varsa, ben sadece, 2 dinlenme ürün hala var 8items görebilirsiniz ama onlarla İşte

ilerleyin olamaz benim Demo Project
belki içerik gömme düşünüyorum UITableView yanlıştır, ancak nasıl düzeltileceğini bilmiyorum. Herhangi bir yardım

- (void)keyboardWasShown:(NSNotification*)aNotification 
{ 
    NSDictionary* info = [aNotification userInfo]; 
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 
    self.botConstraint.constant = kbSize.height; 
    [self.view layoutIfNeeded]; 
    //... 
} 

// Called when the UIKeyboardWillHideNotification is sent 
- (void)keyboardWillBeHidden:(NSNotification*)aNotification 
{ 
    self.botConstraint.constant = 0.0f; 
    [self.view layoutIfNeeded]; 
    //... 
} 

botConstraint ViewController.m yılında yılında ViewController.h

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *botConstraint; 

contentInsets

büyük takdir

cevap

1

Kullanım Autolayout insteads olurdu UITextField/UIScrollView.bottom = fatherView. bottom, Main.storyboard

+0

Cevabınız için teşekkür ederiz. botConstraint hakkında daha fazla bilgi verir misiniz? Şu an "UITextField" ve "UIScrollView" alt bölümleri için 'botConstraint' değerini ekliyorum. sonra klavye gösterildiğinde, metin alanı klavyenin üstünde görünecek ve 'TableView' öğesindeki tüm öğeleri tarayabiliyorum. Sorunumu çözmek gibi görünüyor. ANCAK büyük bir sorun, klavye gösterisi sırasında 'TextField' klavyeyle kayar, 'TextField' sadece klavye gösterisinden sonra görünür. Ve klavye gösterildiğinde, masa görünümü herhangi bir şey canlandırmıyor, klavye gösterildiğinde TableView da yukarı kaydırıldığında istiyorum. Ben –

+0

yüzden şimdiye kadar denedim görebilirsiniz soru kodunuzu güncelleme eksik Lütfen bana yol. –

+0

Demo projemi postama ekledim. eğer sakıncası yoksa, kontrol edebilir misin? Sadece kodumu sadece kodumu değiştirmek istiyorum –