2011-06-08 68 views
0

我有一個視圖窗口,我在界面生成器中創建。我創建了一個UIScrollView,它填充整個窗口並將其他一些項目拖入其中,包括UITextView。我遇到的問題是,當我點擊寫入TextView時,鍵盤阻止了TextView的視圖,因此使用了ScrollView。UIScrollView無法正常工作

現在我已經搜索了很多,並認爲我知道我需要做什麼,但如果我正確地做正確的事情是另一回事。

我得到了反彈,那就是我可以拖動ScrollView中的所有東西,它會反彈回來。當我按下在TextView中寫入時彈出鍵盤,這將ScrollView縮小爲「屏幕大小」 - 「鍵盤大小」(我知道這是因爲我沒有實現「一旦我隱藏鍵盤時執行此操作」功能但是,當我隱藏鍵盤時,ScrollView現在會在鍵盤啓動的地方結束)。但即使視圖大小現在小於內容大小,它也不會滾動,只是繼續反彈。

下面您可以看到我正在使用的代碼。我在viewDidLoad中調用registerForKeyboardNotifications。

// Call this method somewhere in your view controller setup code. 
- (void)registerForKeyboardNotifications 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardWasShown:) 
               name:UIKeyboardDidShowNotification object:nil]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardWillBeHidden:) 
               name:UIKeyboardWillHideNotification object:nil]; 

} 

// Called when the UIKeyboardDidShowNotification is sent. 
- (void)keyboardWasShown:(NSNotification *)n 
{ 
    NSLog(@"WoopWoopWoop"); 

    NSDictionary* userInfo = [n userInfo]; 

    // get the size of the keyboard 
    CGSize keyboardSize = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

    // resize the noteView 
    CGRect viewFrame = self.mainScrollView.frame; 

    viewFrame.size.height -= (keyboardSize.height); 

    mainScrollView.bounces = YES; 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:0.4]; 
    [self.mainScrollView setFrame:viewFrame]; 
    [UIView commitAnimations]; 
} 

我試過的內容視圖設置爲

[mainScrollView setContentSize:CGSizeMake(3200.0,2300.0)]; 

但是這並沒有影響一些這樣的任意大小...

任何想法?

+0

我不知道爲什麼或如何,但放棄後,我在界面生成器中塗鴉,突然它工作.... – Bjorninn 2011-06-08 15:18:47

回答

1

嗨,你不需要使用通知。只需使用UITextFieldDelegate協議方法即可。您可以在這些方法中爲scrollView設置內容偏移量。

例如:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    //Check the necessary textfield and then change yValue accordingly 
    [scrollView setContentOffset:CGPointMake(0,yValue) animated:YES]; 
    return YES; 
} 
+0

我沒有使用TextField,但我可以使用TextView也一樣。雖然偏移量只是ScrollView應該移到的位置,但滾動根本不適用於我的應用程序。設置偏移也有移動它的效果,但它彈回(我試過你的實現)。我可以拖動視圖,但它總是彈回...... – Bjorninn 2011-06-08 13:16:10

1

當我點擊寫入的TextView鍵盤塊的TextView的視圖,因此,使用滾動型的。

首先,我建議這種使用UIScrollViews是沒有必要的(如果你只有一個UITextView顯示。另外,記住的UITextView是UIScrollView中的一個子類)。

您可以通過將其配置爲UIView的子視圖來實現UITextView的重新定位和調整大小。在您的UIView上啓用autoresizesSubviews並配置兩個視圖的彈簧和支桿via the IB Inspector。 UIView容器應該佔用所有可用空間。

使用與你的問題中描述的相同的方法,當UIView被調整大小時,它也應該自動調整UITextView的框架。

現在,即使你確實需要有在頂部一個UIScrollView視圖層次,我還是建議來包裝成一個普通的UIView容器,並配置自動尺寸正如我上面提到。

希望有幫助!

+0

嗯,好的,謝謝我會記住這一點 – Bjorninn 2011-06-08 15:20:07